在perl中根据标题对CSV列值进行排序

在perl中根据标题对CSV列值进行排序,perl,Perl,我有一个包含350个字段的大型csv文件。标题和值应根据另一个csv文件中的标题进行排列 为了在较小的箱子上试用,我有以下代码- 引用头{A B C D} 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 =

我有一个包含350个字段的大型csv文件。标题和值应根据另一个csv文件中的标题进行排列

为了在较小的箱子上试用,我有以下代码- 引用头{A B C D}

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}]);
}
使用File::Basename;
使用数组::Utils qw(:all);
使用Text::CSV;
my@headers=qw(A B C D);
我的$csv\u in=Text::csv->new({binary=>1,auto\u diag=>1});
我的$csv\u out=Text::csv->new({binary=>1,auto\u diag=>1});
打开我的$in,':编码(UTF-8)''test_out.csv';
$csv_in->header($in);
$csv_out->say($out,[@headers]);
while(my$row=$csv\u in->getline\u hr($in)){
$csv_out->say($out,[@{$row}{@headers}]);
}
它正在正确打印标题,但下一行的值为空

输入文件-

A、 B,D,C

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);

我的版本缺少功能
标题
。但我认为,关键的一点是,您必须定义输入CSV文件的列名。

是的。你知道代码中的错误在哪里吗?如果看不到输入,我们就帮不了你什么。输入文件test.csv如下-第1行,A,B,D,C第2行-1,2,4,3你需要在问题本身中输入示例和所需的输出,而不是注释。(尽管我坚持我对你从中复制代码的问题的回答)