【发布时间】:2015-03-10 11:32:15
【问题描述】:
我正在尝试读取动态记录长度的二进制文件。其中有如下数据:
field1field2field3field4vector1vector2
现在field3定义了向量的出现
对于 ex field3 为 2,则将存在 vector1&2,如果值为 3,则将存在 vector1,2&3。
我编写了下面的代码,它工作正常,但性能很差。
假设 field1-4 是固定的,长度为 2652,每个向量长度为 301。 field3 距离位置 2396 3 个字节。
my $string;
my $rep_factor;
my $size;
open (FILE, $ARGV[0]) or die $!;
my $re = 2396;
my $rec = 0;
while (<FILE>) {
seek(FILE,$re,0);
read(FILE,$rep_factor,2);
my $rep_fact = undefined2defined(convert2ascii_decimal($rep_factor,0));
$size = ($rep_fact * 301) + 2652;
seek(FILE,$rec,0);
read FILE,$string,$size;
filewrite ($ARGV[1], recordparse($string));
$rec = $size + $rec;
$re = $size + 2396;
}
请帮我写代码,因为我是 perl 新手,在这里想不出什么。
谢谢, 灰烬
【问题讨论】:
-
如果代码按预期工作,但您想提高其性能,那么Code Review 不适合问这个问题吗?
-
你见过
unpack吗? -
我已经创建了解压二进制字符串的函数....性能问题在于文件的读取