我想使用perl从csv文件中删除一个列,因为我在","上拆分了一行,但是有些列有多个值,因此有多个逗号。也就是说每行可能有不同数量的逗号,因此很难删除我想要删除的列。你能帮忙吗?
答案 0 :(得分:2)
要处理CSV文件,请使用Text::CSV
等实际的csv解析器。
这将处理括在引号中的字段实例,因为它们包含逗号。
答案 1 :(得分:0)
假设您的文件看起来像
Tudor,Vidor,10,Hapci
Szundi,Morgo,7,Szende
Kuka,"Hofeherke, alma",100,Kiralyno
Boszorkany,Herceg,9,Meselo
并且您希望找到第3列的总和,但是在第3行中,您看到第2列具有逗号值,因此要使用Text::CSV
作为:
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
my $csv = Text::CSV->new({ sep_char => ',' });
my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";
my $sum = 0;
open(my $data, '<', $file) or die "Could not open '$file' $!\n";
while (my $line = <$data>) {
chomp $line;
if ($csv->parse($line)) {
my @fields = $csv->fields();
$sum += $fields[2];
} else {
warn "Line could not be parsed: $line\n";
}
}
print "$sum\n";
如果您希望按名称访问CSV文件中的字段,请使用Tie:Handle::CSV