2

多くの列と行を含む 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

Sum of cells in column Value 1、 Sum of cells in columnが必要Value2です。Text::CSV を使用しようとしていますが、結果は行としてしか得られません。

誰でも私を助けることができますか?

4

3 に答える 3

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'
    ];
于 2012-10-26T18:20:34.817 に答える
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
于 2012-10-29T22:58:15.050 に答える
0

私は多くの CSV ファイルを扱っており、私のお気に入りのモジュールはTie::Handle::CSVDBD::CSVです。

perlmeme.org には、CSV ファイルの解析に関する素晴らしいチュートリアルがあります。

于 2012-11-02T23:40:38.080 に答える