我有包含 350 个字段的大型 csv 文件。标题和值应根据另一个 csv 文件中的标题进行排列。
为了尝试较小的情况,我有以下代码参考标题 {ABCD}
use File::Basename;
use Array::Utils qw(:all);
use Text::CSV;
my @headers = qw(A B C D);
my $csv_in = Text::CSV->new({binary => 1, auto_diag => 1});
my $csv_out = Text::CSV->new({binary => 1, auto_diag => 1});
open my $in, '<:encoding(UTF-8)', 'test.csv';
open my $out, '>:encoding(UTF-8)', 'test_out.csv';
$csv_in->header($in);
$csv_out->say($out, [@headers]);
while (my $row = $csv_in->getline_hr($in)) {
$csv_out->say($out, [@{$row}{@headers}]);
}
它正确打印标题,但其他下一行的值为空
输入文件 -
甲、乙、丁、丙
1、2、4、3
预期输出 -
A B C D
1、2、3、4
电流输出 -
A B C D
,,,
任何人都可以帮我解决这个问题吗?
我想,我有另一个版本的 perl 和 Text::CSV。这对我有用:
$csv_in->column_names($csv_in->getline($in));
代替
$csv_in->header($in);
我的版本没有这个功能header
。但我认为,关键是您必须为输入 CSV 文件定义列名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句