我正在尝试使用Parse::CSV来解析带有标题和2列的简单CSV文件。第二列可能包含逗号,但我想忽略它们。无论如何要限制它在逗号上分裂的次数?这是我到目前为止所拥有的
#!/usr/bin/perl
use Parse::CSV;
my $csv = Parse::CSV->new(file => 'file.csv');
while (my $row = $csv->fetch) {
print $row->[0] . "\t" . $row->[1] . "\n";
}
以下是我的数据的示例:
1234,文本1,文本2
5678,文字3
90,文本4,text5
这将返回
1234 text1,text2
5678 text3
90 text4,text5
答案 0 :(得分:1)
如果您真的与Parse::CSV
结婚,可以使用filter执行此操作:
use strict;
use warnings;
use 5.010;
use Parse::CSV;
my $parser = Parse::CSV->new(
file => 'input.csv',
filter => sub { return [ shift @$_, join(',', @$_) ] }
);
while ( my $row = $parser->fetch ) {
say join("\t", @$row);
}
die $parser->errstr if $parser->errstr;
1234 text1,text2
5678 text3
90 text4,text5
请注意,性能会很差,因为Parse::CSV
正在为您拆分列,但之后会立即将它们重新连接在一起。
但是,由于您似乎没有使用真正的CSV(包含分隔符的列未以任何方式引用或转义),为什么不将split
与第三个一起使用参数指定最大字段数?
use strict;
use warnings;
use 5.010;
open my $fh, '<', 'input.csv' or die $!;
while (<$fh>) {
chomp;
my @fields = split(',', $_, 2);
say join("\t", @fields);
}
close $fh;