如何使用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文件返回指定的列。
答案 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