我正在寻找关于如何优化这个perl脚本的建议。
我有这个脚本来做一些小的文件的格式调整。该脚本执行以下操作:
示例输入:
.091590.S |CHF|SWX|2011-05-23 00:00| 77.25| NULL| NULL| 78.620000000000005| NULL
.091590.S |CHF|SWX|2011-05-24 00:00| 77.599999999999994| NULL| NULL| 77.25| NULL
.091590.S |CHF|SWX|2011-05-25 00:00| 77.760000000000005| NULL| NULL| 77.599999999999994| NULL
.091590.S |CHF|SWX|2011-05-26 00:00| 77.430000000000007| NULL| NULL| 77.760000000000005| NULL
.091590.S |CHF|SWX|2011-05-27 00:00| 77.909999999999997| NULL| NULL| 77.430000000000007| NULL
.091590.S |CHF|SWX|2011-05-30 00:00| 78.060000000000002| NULL| NULL| 77.909999999999997| 3506FormattingScript.pl col
它可以是单个数字,也可以是由逗号分隔的数字列表。此输入确定哪一列或哪些列需要日期转换。
@updcol = split(',',@ARGV[0]);
while (<STDIN>)
{
s/.$/|DATAEND/g; ## USING THIS TO KEEP FROM TRUNCATING NULL LAST COLUMN
s/^\s*//g;
s/\s*$//g;
s/\s*\|/\|/g;
s/\|\s*/\|/g;
s/\|NULL\|/\|\|/g;
s/\|NULL\s*$/\|/g;
s/\|NULL\s*/\|/g;
s/\|NULL$/\|/g;
@dataline = split('\|',$_);
if (@updcol[0] != 999) { ## REFORMAT DATES IF PARAM IS NOT 999
foreach my $col (@updcol) {
$dataline[$col]=substr($dataline[$col],0,4).substr($dataline[$col],5,2).substr($dataline[$col],8,2);
}}
$dataline[-1]="";
$line=join('|',@dataline);
print substr($line,0,-1)."\n";
}
exit 0;示例输出:
.091590.S|CHF|SWX|2011-05-23 00:00|77.25|||78.620000000000005|
.091590.S|CHF|SWX|2011-05-24 00:00|77.599999999999994|||77.25|
.091590.S|CHF|SWX|2011-05-25 00:00|77.760000000000005|||77.599999999999994|
.091590.S|CHF|SWX|2011-05-26 00:00|77.430000000000007|||77.760000000000005|
.091590.S|CHF|SWX|2011-05-27 00:00|77.909999999999997|||77.430000000000007|
.091590.S|CHF|SWX|2011-05-30 00:00|78.060000000000002|||77.909999999999997|3506发布于 2012-07-24 21:37:29
任何优化都将是微观的,这意味着您需要拿出基准测试,并开始测试不同的方法来做同样的事情。
清理代码比优化代码更有好处。
my @date_cols = split(/,/, shift(@ARGV));
while (<>) {
#chomp; # Redundant.
my @fields = split(/\|/, $_, -1);
for (@fields) {
s/^\s+//;
s/\s+\z//;
s/^NULL\z//;
}
for (@fields[@date_cols]) {
s/^(....)-(..)-(..).*/$1$2$3/s;
}
print(join('|', @fields), "\n");
}发布于 2012-07-25 04:47:32
您可以使用Regexp::组装优化正则表达式。这将使您能够将所有正则表达式组合成一个正则表达式,该正则表达式的执行速度可能比运行多个正则表达式更快。
https://stackoverflow.com/questions/11639490
复制相似问题