perl - Perl while 循环使用 read()
问题描述
我想data.txt
使用read
. 我想一次读取每行的前四个整数。
数据.txt
line1 0101020102
line2 2010201001
line3 0201010201
line1
等是文件的一部分。
这是我现在能做的
Perl
my $data;
my $IN;
my $n = 0;
$line = 1;
open($IN, '<', "data.txt") or die " Error";
while ( $line != 0 ) {
seek($IN, 6, SEEK_SET);
$line = read($IN, $data, 4);
seek($IN, 0, SEEK_SET);
}
问题是,使用这个while
循环,Perl 不断地在无限循环中读取第一行。
我该如何处理这个问题?
解决方案
我想你误解了什么seek()
。作为SEEK_SET
第三个参数,第二个参数被解释为从文件开始测量的要移动到的位置。因此,每次运行此行时:
seek($IN, 6, SEEK_SET);
它总是移动到文件中的第七个位置(显然,总是在同一行)。然后当你运行这一行时:
seek($IN, 0, SEEK_SET);
它总是移回到文件的开头。
最初,我认为解决方案是更改SEEK_SET
为SEEK_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";
}
推荐阅读
- android - Google Play 结算库 3.0.3 和 4.0.0 不适用于 Gsuite 帐户
- python - 命名空间冲突 - ModuleNotFoundError
- reactjs - How can I access a file that is on another folder in React
- python - Dataframes getting chucked off in ThreadPoolExecutor Throwing Multiple random Errors
- c++ - How to mock and test dynamically created objects using google test
- html - Css font not changing correctly or aligning to the center
- php - IMAP and Gmail: How to exclude address from Search
- python - 在给定的时间间隔内加入带有字典的列表
- python - Discord bot踢功能问题
- prestashop - Problem stock update prestashop when i finished order