我正在使用Parse::FixedLength,我希望在解析时删除前导UITableView
但不幸的是,当整个字符串由0
组成时,它会返回一个空值。这意味着我无法区分错误的输入(空白)和后处理的空白输入。
0
输出是(<空白>下面是空字符串):
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
有关如何实现这一目标的任何想法?顺便说一句,以上是该模块的玩具示例。我的实际文件有超过1200个字段,几乎每个人(不是全部)都有5
0
117
<blank>
7
个。
谢谢!
答案 0 :(得分:2)
简短的回答是否定的。修剪零填充字段时,无法使Parser::FixedLength
无法读取所有0。这是它为修剪设置的正则表达式:
'TPAD' => ARRAY(0x7fb378979a08)
0 (?^:^0+)
-> qr/(?^:^0+)/
所以它读取所有零。但是,您可以滥用此内部数据结构并制作可实现您所需内容的黑客攻击:
$parser->{TPAD}[0] = qr/^0+(?=\d)/;
这会将trim正则表达式设置为对另一个数字具有正向前瞻,因此当Parser :: FixedLength修剪它时,它将至少保存一个数字。