Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缺少使用Perl模块Text::CSV::Slurp的标题_Perl_Csv - Fatal编程技术网

缺少使用Perl模块Text::CSV::Slurp的标题

缺少使用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 有什么建议吗 代码: }构造函数方法采用字段顺

我正在使用从哈希数组创建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
有什么建议吗

代码:

}

构造函数方法采用
字段顺序
选项,该选项定义要使用的哈希元素的键及其在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;