perl - 根据 perl 中的标题对 CSV 列值进行排序
问题描述
我有包含 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}]);
}
它正在正确打印标题,但其他下一行的值为空
输入文件 -
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);
我的版本缺少这个功能header
。但我认为,关键是您必须为输入的 CSV 文件定义列名。
推荐阅读
- c# - 如何处理视图依赖于 MVVM 上下文中的多个模型的情况?
- rest - 我们如何使用 Google Fit rest API 获取当天的实时步数?
- java - 如何自动让我的应用程序在一组图像之间转换并从第一个元素重新开始?
- javascript - 如何重定向文本字段输入去表单提交的命令而不是按钮中间表单?
- spring - Spring data mongo - 获取对象数组的总和
- python-3.x - 如何在mongodb中搜索字段的特定动态模式。?
- python - 使用 Flask 运行 keras 预测会出错
- python - 如何使用其他数据框中的列值生成数据框
- ui-testing - Firebase 仪器测试超时
- crystal-reports - 我想创建向下钻取报告。但是为该钻取报告提供参数的超链接格式是什么