如何处理固定长度记录且中间没有换行符的二进制文件?
我有一个由固定长度记录组成的文本文件,但全部在一行中,中间没有换行符。 在 Perl 中处理它的最佳方法是什么? 谢谢!
I have a text file that's composed of fixed length records but all in one line with no line breaks in between. What's the best way to process it in Perl? Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先,让我们打开文件,并确保它处于 bin 模式:
现在,将输入记录分隔符设置为引用记录的长度(假设每条记录 120 字节):
现在,让我们读取记录:
现在,如果您想要从中获取数据,您必须编写一些 unpack 的东西:
现在您可以处理@elements,并完成 while() {} 循环:
整个“程序”:
First, let's open the file, and make sure it's in bin mode:
Now, set input record separator to reference to length of your records (let's assume 120 bytes per record):
Now, let's read the records:
And now if you want to get data out of it, you have to write some unpack thing:
Now you can process @elements, and finish while() {} loop:
Whole "program":
使用
read FILEHANDLE,SCALAR,LENGTH
函数一次将一个块读入缓冲区......并使用正则表达式、
unpack
或处理缓冲区不管你喜欢什么。use the
read FILEHANDLE,SCALAR,LENGTH
function to read a block at a time into a buffer...... and process the buffer using regular expressions,
unpack
, or however you like.unpack() 可能在这里有用。 您可以指定字符列表(使用“c”、“C”或“W”),它会自动解压到列表中。 有关要使用的选项,请参阅 pack 文档。
unpack() may be of use here. You can specify the list of characters (using 'c', 'C' or 'W') and it'll unpack automatically into a list. See the pack documentation for the options to use.