gpt4 book ai didi

perl - 如何加快 Perl 处理固定宽度数据的速度?

转载 作者:行者123 更新时间:2023-12-03 15:56:27 25 4
gpt4 key购买 nike

我们有一个成熟的代码体,可以将文件中的数据加载到数据库中。
有几种文件格式;它们都是固定宽度的字段。

部分代码使用 Perl unpack()函数将输入数据中的字段读取到包变量中。
然后,业务逻辑能够以“人类可读”的方式引用这些字段。

文件读取代码在读取文件之前从格式描述中生成一次。

在草图形式中,生成的代码如下所示:

while ( <> ) {

# Start of generated code.

# Here we unpack 2 fields, real code does around 200.
( $FIELDS::transaction_date, $FIELDS::customer_id ) = unpack q{A8 A20};

# Some fields have leading space removed
# Generated code has one line like this per affected field.
$FIELDS::customer_id =~ s/^\s+//;

# End of generated code.

# Then we apply business logic to the data ...
if ( $FIELDS::transaction_date eq $today ) {
push @fields, q{something or other};
}

# Write to standard format for bulk load to the database.
print $fh join( '|', @fields ) . q{\n} or die;
}

分析代码显示大约 35% 的时间花在解包和前导空格条上。
剩余时间用于验证和转换数据,以及写入输出文件。

似乎没有业务逻辑的单个部分占用超过 1-2% 的运行时间。

问题是 - 我们能否以某种方式从解包和空间剥离中获得更快的速度?最好不必重构所有引用 FIELDS 包变量的代码。

编辑:

如果它有所作为
$ perl -v
This is perl, v5.8.0 built for PA-RISC1.1

最佳答案

我实际上已经一遍又一遍地处理这个问题。 Unpack is better than substr .

就剥离空间而言,你几乎被搞砸了。那个正则表达式黑客是“官方”的方式来做到这一点。您可能可以通过改进解包语句来提高效率(假设没有数据超过 4 位,为什么要解包该字段的完整 12 位数字?),但除此之外,解析只是一个 p.i.t.a。

祝你的平面数据好运。该死的遗留垃圾,我多么讨厌它。

关于perl - 如何加快 Perl 处理固定宽度数据的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1588795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com