使用read()的Perl while循环
我想使用使用read()的Perl while循环,perl,Perl,我想使用read读取文本文件data.txt。 我想一次读取每行的前四个整数 data.txt 行1等是文件的一部分 这就是我目前能做的 Perl my$data; 我的美元; 我的$n=0; $line=1; open($IN,“我想您误解了seek()的作用。将seek\u SET作为第三个参数,第二个参数被解释为从文件开始测量的移动位置。因此,每次运行此行时: seek($IN, 6, SEEK_SET); seek($IN, 0, SEEK_SET); 它总是移动到文件中的第七个位置
read
读取文本文件data.txt
。
我想一次读取每行的前四个整数
data.txt
行1
等是文件的一部分
这就是我目前能做的
Perl
my$data;
我的美元;
我的$n=0;
$line=1;
open($IN,“我想您误解了seek()
的作用。将seek\u SET
作为第三个参数,第二个参数被解释为从文件开始测量的移动位置。因此,每次运行此行时:
seek($IN, 6, SEEK_SET);
seek($IN, 0, SEEK_SET);
它总是移动到文件中的第七个位置(显然,这总是在同一行上)。然后,当您运行这一行时:
seek($IN, 6, SEEK_SET);
seek($IN, 0, SEEK_SET);
它总是移回文件的开头
最初,我认为解决方案是将SEEK\u SET
更改为SEEK\u CUR
(它将第二个参数解释为相对于当前位置移动的量),但它比这要复杂一些。下面是我如何使其工作的:
seek($IN, 6, SEEK_CUR); # Move forward six spaces
$line = read($IN, $data, 4);
seek($IN, 7, SEEK_CUR); # Move forward seven places
但实际上,正则表达式是这里最好的方法
while(<$IN>) {
($data) = /\s(\d{4})/;
print "$data\n";
}
while(){
($data)=/\s(\d{4})/;
打印“$data\n”;
}
我认为您误解了seek()
的作用。将seek\u SET
作为第三个参数,第二个参数被解释为从文件开始测量的移动位置。因此,每次运行此行时:
seek($IN, 6, SEEK_SET);
seek($IN, 0, SEEK_SET);
它总是移动到文件中的第七个位置(显然,这总是在同一行上)。然后,当您运行这一行时:
seek($IN, 6, SEEK_SET);
seek($IN, 0, SEEK_SET);
它总是移回文件的开头
最初,我认为解决方案是将SEEK\u SET
更改为SEEK\u CUR
(它将第二个参数解释为相对于当前位置移动的量),但它比这要复杂一些。下面是我如何使其工作的:
seek($IN, 6, SEEK_CUR); # Move forward six spaces
$line = read($IN, $data, 4);
seek($IN, 7, SEEK_CUR); # Move forward seven places
但实际上,正则表达式是这里最好的方法
while(<$IN>) {
($data) = /\s(\d{4})/;
print "$data\n";
}
while(){
($data)=/\s(\d{4})/;
打印“$data\n”;
}
每次读取后,当您将seek()
添加到文件开头时,它为什么还要做其他事情?您是否认为使用read
在这里是个好主意(不是),或者您只是在试验操作符?当您seek()时,它为什么还要做其他事情
到每次读取后的文件开头?您是否认为在这里使用读取
是一个好主意(不是这样)或者您只是在试验运算符?请注意,这在Windows上不起作用,因为您假定一个额外的行终止符字符,而Windows使用两个。请注意,这在Windows上不起作用,因为您假定一个额外的行终止符字符,而Windows使用两个