1

成功することを期待して、次のプログラムを作成しました。しかし、私はそれを得ることができませんでした。

my $fileName = 'myfile.txt';
print $fileName,"\n";

if (open MYFILE, "<", $fileName) {
    my $Data;
    {
        local $/ = undef;
        $Data = <MYFILE>;
    }
    my @values = split('\n', $Data);
    chomp(@values);

    if($values[2] eq '9999999999')  {
        print "Success"."\n";
    }

}

myfile.txt の内容は

160002
something
9999999999
700021
4

4 に答える 4

1

で割ってみる\s*[\r\n]+

my $fileName = 'myfile.txt';
print $fileName,"\n";

if (open MYFILE, "<", $fileName) {
    my $Data;
    {
        local $/ = undef;
        $Data = <MYFILE>;
    }
    my @values = split(/\s*[\r\n]+/, $Data);

    if($values[2] eq '9999999999')  {
        print "Success";
    }

}
于 2013-06-14T16:51:39.913 に答える
1

1 行をチェックするために、ファイル全体を配列に読み込む必要はありません。ファイルを開き、気にしない行をスキップしてから、気にする行で遊んでください。必要な作業が完了したら、ファイルの読み取りを停止します。このようにして、メモリ内には 1 行だけが残ります。

my $fileName = 'myfile.txt';
open MYFILE, "<", $fileName or die "$filename: $!";

while( <MYFILE> ) {
    next if $. < 3;  # $. is the line number
    last if $. > 3;

    chomp;
    print "Success\n" if $_ eq '9999999999';
    }

close MYFILE;
于 2013-06-14T20:18:51.940 に答える
1

myfile.txtキャリッジ リターン (CR、\r) が含まれていると、期待どおりに動作しません。別の考えられる原因は、改行の前の末尾のスペース (LF、\n) です。

于 2013-06-14T16:43:58.210 に答える
0
my $fileName = 'myfile.txt';
open MYFILE, "<", $fileName || die "$fileName: $!";

while( $rec = <MYFILE> ) {
   for ($rec) { chomp; s/\r//; s/^\s+//; s/\s+$//; } #Remove line-feed and space characters
   $cnt++;  
   if ( $rec =~ /^9+$/ ) { print "Success\n"; last; }  #if record matches "9"s only 
                                                       #print "Success" and live the loop  
}

close MYFILE;

#Or you can write: if ($cnt==3 and $rec =~ /^9{10}$/) { print "Success\n"; last; } 
#If record 3 matches ten "9"s print "Success" and live the loop.
于 2013-06-16T10:24:01.167 に答える