1

何千もの文字を読み取り、一致する文字列を見つけようとするプログラムをPerlで作成しようとしています。文字列と次の 5 文字を出力する必要があります。また、それが見つかった場所、つまり何文字入っているかを出力する必要もあります。私は Perl にかなり慣れていません。今、授業で習っています。

これが私がこれまでに持っているコードです:

#!/usr/bin/perl

$sequence = 'abcd';
$fileName = 'file.txt';

#Opening file
unless (open(fileName, $fileName)) {
    print "Cannot open file.";
    exit;
}
@tempArr = <fileName>;    #Adding the lines to an array
close fileName;           #closing the file
$characters = join('', @tempArr);    #making it a clean string
$characters =~ s/\s//g;               #removing white lines
if (characters =~ m/$sequence/i) {

    #Print $sequence and next five characters
}
else {
    print "Does not contain the sequence.";
}

exit;

file.txt は次のようになります。

aajbkjklasjlksjadlasjdaljasdlkajs
aabasdajlakjdlasdjkalsdkjalsdkjds
askdjakldamwnemwnamsndjawekljadsa
abcassdadadfaasabsadfabcdhereeakj

「abcdheree」を印刷する必要があります

4

1 に答える 1

2

$sequence& その後の 5 文字を印刷するには、次を使用してみてください。

if ($characters =~ m/$sequence.{5}/i) {
    print "$&\n";

$(あなたはon を忘れましたcharacters)

ノート

  • .任意の文字を意味します
  • {5}量指定子です
  • を使用するときはopen、次のように 3 つの引数を使用します: http://perldoc.perl.org/perlopentut.htmlopen my $fh, "<", "$file" or die $!;を参照してください。
  • 常にuse strict; use warnings;スクリプトの先頭に置く
  • $変数を忘れないでください(多くのものを見逃します)
  • my変数の宣言に使用
  • おそらく、1 つの大きな文字列を作成するよりも優れたアプローチです。次のように、配列を 1 行ずつ処理できます。foreach my $line (@tempArr) { #process $line }
  • @melTemp1宣言されていない配列を呼び出す

最後に

#!/usr/bin/perl
use strict; use warnings;

my $sequence = 'abcd';
my $fileName = 'file.txt';

#Opening file
open my $fh, "<", $fileName or die "Cannot open file. [$!]";

my @tempArr = <$fh>;                    #Putting the file handle into an array
close $fileName;                        #closing the file handle

my $characters = join('', @tempArr);    #making it a big string
$characters =~ s/\s//g;                 #removing white spaces & tabs

if ($characters =~ m/$sequence.{5}/i) {
    print "$&\n";
}
else {
    print "Does not contain the sequence.";
}
于 2012-11-08T03:21:15.947 に答える