我有一个包含大量列和行的CSV文件,但我需要对某些列的单元格求和:
Samples | Name | Value1 | Value2 | Value3
A-Sample | A-Name | 1 | 32 | 27 | 21
B-Sample | B-Name | 2 | 23 | 12 | 13
C-Sample | C-Name | 3 | 10 | 98 | 59
D-Sample | D-Name | 4 | 21 | 78 | 72
E-Sample | E-Name | 5 | 32 | 72 | 27
我需要列Value 1
中的单元格总和,列Value2
中的单元格总和。我正在尝试使用Text :: CSV,但我只将结果作为行。
有人可以帮助我吗?
答案 0 :(得分:0)
尝试Spreadsheet :: Read,也许它符合您的需求。使用此模块,您可以像任何其他电子表格一样使用csv。有关更多信息,请参阅perldoc Spreadsheet :: Read或https://metacpan.org/module/Spreadsheet::Read。
#! /usr/bin/env perl
use Modern::Perl '2012';
use Spreadsheet::Read;
use Data::Dumper;
my $spreadsheet = my $ref = ReadData ("test.csv", sep => "|");
my @rows = Spreadsheet::Read::rows ($spreadsheet->[1]);
my @values = map {$_->[4] } @rows; # columns starting with 0
say Dumper (\@values);
<强>输出强>
$VAR1 = [
'Value3',
'27',
'12',
'98',
'78',
'72'
];
答案 1 :(得分:0)
我最喜欢的这类东西是Tie :: Array :: CSV
use Tie::Array::CSV;
tie my @csv, 'Tie::Array::CSV', 'filename.csv' or die;
my @answer; # store the results
for (my $row = 1; $row < @csv; $row++) # each row if the csv
{
next unless $row->[2] =~ /^\s*\d+\s*$/; # Not rows where 3rd field isn't numeric
for (my $i = 2; $i < @$row; $i++) # cols 2 onwards
{
$answer[$i] += $row->[$i]; # sum the results
}
}
say "@answer[2 .. $#answer]"; # display the sums
答案 2 :(得分:0)
我使用了很多CSV文件,到目前为止我最喜欢的模块是Tie::Handle::CSV和DBD::CSV。
perlmeme.org在解析CSV文件方面有一个很棒的tutorial。