我有一个文本文件,它由固定长度的记录组成,但都在一行中,两者之间没有换行符.在Perl中处理它的最佳方法是什么?谢谢!
小智 8
首先,让我们打开文件,并确保它处于bin模式:
open my $fh, '<', 'file.name' or die "Cannot open file.name: $!";
binmode $fh;
Run Code Online (Sandbox Code Playgroud)
现在,设置输入记录分隔符以引用记录的长度(假设每个记录120个字节):
local $/ = \120;
Run Code Online (Sandbox Code Playgroud)
现在,让我们阅读记录:
while (my $record = <$fh>) {
Run Code Online (Sandbox Code Playgroud)
现在,如果你想从中获取数据,你必须编写一些解压缩的东西:
my @elements = unpack("......", $record);
Run Code Online (Sandbox Code Playgroud)
现在你可以处理@elements,并完成while(){}循环:
...
}
Run Code Online (Sandbox Code Playgroud)
整个"程序":
open my $fh, '<', 'file.name' or die "Cannot open file.name: $!";
binmode $fh;
local $/ = \120;
while (my $record = <$fh>) {
my @elements = unpack("......", $record);
...
}
close $fh;
Run Code Online (Sandbox Code Playgroud)
使用该read FILEHANDLE,SCALAR,LENGTH函数一次将一个块读入缓冲区...
use constant LEN => 60;
while (!eof $fh) {
my $len = read $fh, $buf, LEN;
die "short read" if $len < LEN;
# processing...
}
Run Code Online (Sandbox Code Playgroud)
...并使用正则表达式处理缓冲区unpack,或者您喜欢.
| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |