我写了下面的程序,希望能获得成功。但我永远也得不到它。
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发布于 2013-06-15 00:51:40
尝试按\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-15 00:43:58
如果myfile.txt包含回车符(CR,\r),它将不会按预期工作。另一个可能的原因是换行符(LF,\n)前的尾随空格。
发布于 2013-06-15 04:18:52
您不需要将整个文件读入数组来检查一行。打开文件,跳过你不关心的行,然后处理你关心的行。当你完成了你需要做的事情,停止读取这个文件。这样,内存中只有一行:
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;https://stackoverflow.com/questions/17113255
复制相似问题