缺少使用Perl模块Text::CSV::Slurp的标题
我正在使用从哈希数组创建CSV文件。它工作得很好,只是缺少一些标题缺少使用Perl模块Text::CSV::Slurp的标题,perl,csv,Perl,Csv,我正在使用从哈希数组创建CSV文件。它工作得很好,只是缺少一些标题 hash1 校长1校长2 1 2 哈希2 校长1校长2校长3 11 22 33 我希望最终输出为CSV文件: header1 header2 header3 1 2 11 22 33 而不是slurp输出 header1 header2 1 2 11 22 有什么建议吗 代码: }构造函数方法采用字段顺
hash1
校长1校长2
1 2
哈希2
校长1校长2校长3
11 22 33
我希望最终输出为CSV文件:
header1 header2 header3
1 2
11 22 33
而不是slurp输出
header1 header2
1 2
11 22
有什么建议吗
代码:
}构造函数方法采用字段顺序
选项,该选项定义要使用的哈希元素的键及其在CSV记录中的顺序
看看这段代码,我认为它是不言自明的
使用严格;
使用警告;
使用Text::CSV::Slurp;
我的@数据=(
{
校长1=>1,
header2=>2,
},
{
校长1=>11,
标题2=>22,
校长3=>33,
},
);
我的$csv=Text::csv::Slurp->create(
输入=>\@数据,
字段顺序=>[qw/header1 header2 header3/];
打印$csv;
输出
header1、header2、header3
1,2,
11,22,33
更新 要自动从数据中获取标题列表,您可以编写如下代码。输出与上一个程序的输出相同 注意,没有办法知道如何最好地对标题列表进行排序,因此我使用了一个简单的词汇排序。它用这些琐碎的数据产生了想要的效果
use strict;
use warnings;
use Text::CSV::Slurp;
my @data = (
{
header1 => 1,
header2 => 2,
},
{
header1 => 11,
header2 => 22,
header3 => 33,
},
);
my @headers = do {
my %headers;
$headers{$_}++ for map { keys %$_ } @data;
sort keys %headers;
};
my $csv = Text::CSV::Slurp->create(
input => \@data,
field_order => \@headers);
print $csv;
也许你应该展示你的代码。谢谢你。我可以像循环我的散列数组一样,获取每个散列的所有头,删除重复项,并将它们分配给字段顺序吗?有更好的方法吗?@user1496482:我在回答中添加了一个选项,说明如何自动生成所有哈希键的列表。
use strict;
use warnings;
use Text::CSV::Slurp;
my @data = (
{
header1 => 1,
header2 => 2,
},
{
header1 => 11,
header2 => 22,
header3 => 33,
},
);
my @headers = do {
my %headers;
$headers{$_}++ for map { keys %$_ } @data;
sort keys %headers;
};
my $csv = Text::CSV::Slurp->create(
input => \@data,
field_order => \@headers);
print $csv;