在使用ruby读取二进制文件时查找字节数组实例的最佳方法是什么?



我正在逆向工程一些旧的数据库文件。一切都很顺利。到目前为止,我工作过的所有文件都有固定的宽度记录,宽度在头中定义。非常直接……我知道头长度,所以我可以在头之后开始读取文件,然后我知道X字节之后我到达记录的末尾。如果记录是30字节,头是100,我可以这样做:

 file = IO.binread(path + file_name, end_of_header, end_of_file)
 read_file(file[0, 30]) #This calls a function that parses the data..

然而,有几个表具有动态宽度记录。因此,一条记录可能是100字节,下一条可能是20字节。记录和用户保存的文本量一样大。似乎没有任何东西在记录上注明记录的长度。

每个记录由分隔符(FEFE)分隔。我正在扫描下一个分隔符并以这种方式拉出记录,但是需要一个字节一个字节地读取整个文件以寻找匹配。是否有比扫描找到下一个匹配或获得每个字节数组的所有索引的列表更好的方法?

RUBY…

可以为readline指定分隔符

file.readline(sep="FEFE")

或者如果你指的是2个字符的十六进制字符串:

file.readline(sep="xFExFE")

获取一条记录(包括分隔符)

或者你可以传递给代码块

file.readlines(sep="xFExFE").each{|line|...}

最新更新