【发布时间】:2013-08-05 20:58:50
【问题描述】:
以下问题:
我有一个分隔文件,其中行有 25 或 26 个字段。 对于所有有 25 个字段的行,我需要在第 13 个字段之后添加一个空行,这样它也将有 26 个字段。
旧:
Z|432651242|987654321|XYZ|Abc|DEFEF||Abc-De-Fg|18|33221|Qwerty|18.06.3213|abc||123|Tepp|11.07.4443|2|||||4433322342344||
新:
Z|432651242|987654321|XYZ|Abc|DEFEF||Abc-De-Fg|18|33221|Qwerty|18.06.3213|abc|||123|Tepp|11.07.4443|2|||||4433322342344||
我设法过滤了需要更改的行:
#!/usr/bin/perl
use strict;
use warnings;
my (@cols,$fieldLength,);
while(<>){
@cols = split('\|', $_);
$fieldLength=@cols;
if ($fieldLength==25){
print $_;
}
}
我的想法是替换分隔符“|”在第 13 次出现“||”,但无法做到。我试着用谷歌搜索,但这些例子对我不起作用。
有人可以帮我吗?
我也很欣赏使用 CPAN 的 CSV 模块的解决方案。
【问题讨论】:
-
Text::CSV会比正则表达式更安全... -
Text::CSV是这项工作的正确工具。
标签: regex perl csv delimiter substitution