2014-06-11 61 views
1

我想使用perl從csv文件中刪除一列,因爲我分裂「,」行,但有一些列與多個值,因此多個逗號。即每行可能有不同數量的逗號,因此很難刪除我想要刪除的列。你能幫忙嗎?閱讀csv文件與列中的多個值與Perl

回答

2

要處理CSV文件,請使用實際的csv分析器,如Text::CSV

這將處理用引號括起來的字段的實例,因爲它們包含逗號。

+0

好,我會嘗試使用,謝謝。 – Anmol

0

假設你的文件看起來像

Tudor,Vidor,10,Hapci 
Szundi,Morgo,7,Szende 
Kuka,"Hofeherke, alma",100,Kiralyno 
Boszorkany,Herceg,9,Meselo 

,你想找到第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