fat*_*afa 3 csv perl 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;
Run Code Online (Sandbox Code Playgroud)
其中 read_column 方法读取返回另一个 csv 文件中的指定列。
要添加列,只需向每行添加一个元素并像平常一样打印行即可。以下内容将在 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 $!;
Run Code Online (Sandbox Code Playgroud)
foo,bar
larry,curly
Run Code Online (Sandbox Code Playgroud)
foo,bar,baz
larry,curly,moe
Run Code Online (Sandbox Code Playgroud)
请注意,如果@column
元素少于行数,则输出中将出现空格。
要将列插入到中间的某个位置(例如,在第一列之后)而不是将其附加到末尾,请更改
push @$row, shift @column;
Run Code Online (Sandbox Code Playgroud)
到
my $offset = 1; # zero-indexed
splice @$row, $offset, 0, shift @column;
Run Code Online (Sandbox Code Playgroud)
foo,baz,bar
larry,moe,curly
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4005 次 |
最近记录: |