使用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使用两个