所有領先/填充字符我使用Parse::FixedLength,我想刪除領先0
s,而解析可惜,當整個字符串是由0
的IT返回空值。這意味着我無法區分不良輸入(空白)和後處理空白輸入。避免微調使用Parse ::定長
use Parse::FixedLength;
my $parser = Parse::FixedLength->new([
first_name => '10:1:10',
last_name => '10:11:20',
widgets_this_month => '5R0:21:25',
], {trim => '1'});
while (<DATA>) {
warn "No record terminator found!\n" unless chomp;
warn "Short Record!\n" unless $parser->length == length;
my $data = $parser->parse($_);
print $data->{'widgets_this_month'},$/;
}
__DATA__
JOHN SMITH 00005
BOB JONES 00000
JOE STAN 00117
BLANK WIDGET
JANE DOE 00007
輸出是(<空白>下面是空字符串):
5
<blank>
117
<blank>
7
我所要的輸出是:
5
0
117
<blank>
7
我如何能做到這一點有什麼想法?順便說一句,以上是模塊中的一個玩具例子。我的實際文件有超過1200個字段,幾乎所有人(不是全部)都領先0
s。
謝謝!
有什麼理由不讓它們不被修剪? – ysth
@ysth這些文件非常大(20 + GB),大多數字段都有填充字符。不保留填充字符將有助於減小尺寸,並允許我在下游程序中讀取它,而無需處理填充字符。我可以讓它們不被修剪,然後在解析完成後進行修剪,但隨後我將不得不遍歷所有的字段並刪除填充,這非常麻煩。如果有一個更清潔的後處理解決方案,那也可以工作 – Ecognium