使用Text :: CSV_XS模块将列插入Perl中的CSV文件

时间:2013-12-31 20:56:28

标签: perl csv perl-module export-to-csv

如何使用Text :: CSV_XS模块将列添加到CSV文件?

模块中的打印例程仅将数组写为一行。如果我有一个数组,我怎么能把它作为一个列写到文件?我已经写了下面的代码

open my $outFH, ">", $outFile or die "$outFile: $!";
$outFilecsv = Text::CSV_XS->new ({ binary => 1, eol => $/ });              
@column = read_column($inFile, $i);
$outFilecsv->print($outFH, \@column)or $outFilecsv->error_diag;

其中read_column方法读取从另一个csv文件返回指定的列。

1 个答案:

答案 0 :(得分:3)

要添加列,只需向每行添加一个元素,然后像往常一样打印行。以下内容将在CSV的末尾添加一列:

#!/usr/bin/perl

use strict;
use warnings;

use Text::CSV_XS;

my @column = qw(baz moe);

my $csv = Text::CSV_XS->new({ binary => 1, auto_diag => 1, eol => $/ });

open my $in, "<", "in.csv" or die $!;
open my $out, ">", "out.csv" or die $!;

while (my $row = $csv->getline($in)) {
    push @$row, shift @column;
    $csv->print($out, $row);
}

close $in;
close $out;

rename "out.csv", "in.csv" or die $!;

输入:

foo,bar        
larry,curly

输出:

foo,bar,baz
larry,curly,moe

请注意,如果@column的元素少于行数,则输出中会出现空格。

要将列插入中间的某个位置(例如,在第一列之后),而不是将其附加到结尾,请更改

push @$row, shift @column;

my $offset = 1; # zero-indexed
splice @$row, $offset, 0, shift @column;

输出:

foo,baz,bar
larry,moe,curly