使用Perl读取包含多个值的csv文件

时间:2014-06-11 06:01:23

标签: perl csv

我想使用perl从csv文件中删除一个列,因为我在","上拆分了一行,但是有些列有多个值,因此有多个逗号。也就是说每行可能有不同数量的逗号,因此很难删除我想要删除的列。你能帮忙吗?

2 个答案:

答案 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