perl - 如何在 Perl 中读取固定长度的记录?

标签 perl fixed-length-record

在 Perl 中读取固定长度记录的最佳方法是什么。我知道要读取如下文件:

ABCDE 302
DEFGC 876

我可以
while (<FILE>) {
   $key = substr($_, 0, 5);
   $value = substr($_, 7, 3);
}

但是没有办法通过读取/解包来做到这一点吗?

最佳答案

my($key, $value) = unpack "A5 A3";    # Original, but slightly dubious

我们都需要查看 unpack 上的选项。手册页(尤其是 pack 手册页)。

由于 A pack 运算符删除了尾随空格,因此您的示例可以编码为:
my($key, $value) = unpack "A6A3";

或者(这是 Perl,所以是 TMTOWTDI):
my($key, $blank, $value) = unpack "A5A1A3";

1 是可选的,但系统性和对称性。这样做的一个优点是您可以验证 $blank eq " " .

关于perl - 如何在 Perl 中读取固定长度的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/407407/

相关文章:

perl - 找不到错误 "Global symbol @xx requires explicit package name"

perl - 使用 Perl-Mechanize : finalizing a little programme 进行 Dom 处理

java - 固定文本文件的动态解析

html - 在 Bootstrap 3 中将列数据宽度限制为固定大小

python - 如何在Python中将固定长度文件转换为csv文件?

c++ - 将固定长度的记录写入文件 C++

perl - 如何检查 Perl 标量变量是否已初始化?

perl - 在 Perl 中,我可以使用常量来促进编译时检测方法调用中的拼写错误吗?

regex - 如何使用 Perl 正则表达式突出显示连续重复的单词?

Java固定宽度文件格式读/写库