如何在perl中将多维数组写为制表符分隔的.text文件

时间:2011-05-26 19:50:30

标签: perl multidimensional-array tab-delimited

我有一个名为@main的多维数组 我想把这个数组写入perl中的制表符分隔的.txt文件中 任何人都可以帮我解决这个问题吗?

5 个答案:

答案 0 :(得分:5)

open my $fh, '>', "out.txt" or die $!;
print $fh (join("\t", @$_), "\n") for @array;

答案 1 :(得分:2)

我猜你的多维数组实际上是一个引用到数组的数组,因为这是Perl允许你嵌入数组中数组的唯一方法。 / p>

例如:

@array1 = ('20020701', 'Sending Mail in Perl', 'Philip Yuson');
@array2 = ('20020601', 'Manipulating Dates in Perl', 'Philip Yuson');
@array3 = ('20020501', 'GUI Application for CVS', 'Philip Yuson');

@main = (\@array1, \@array2, \@array3);

将它们打印到文件中:

open(my $out, '>', 'somefile.txt') || die("Unable to open somefile.txt: $!");
foreach my $row (@main) {
    print $out join(",", @{$row}) . "\n";
}
close($out);

答案 2 :(得分:1)

这不是一个多维数组,它是一个通过连接其他三个数组形成的数组。

perl -e '@f=(1,2,3); @g=(4,5,6); @h=(@f,@g); print join("\t",@h)."\n";'

如果您需要进一步的帮助,请提供所需的输出。

答案 3 :(得分:1)

我希望有两个方面:

 foreach my $row (@array) {
     print join ("\t", @{$row}) . "\n";
 }

Perl没有多维数组。相反,它的三种本机数据类型之一是一维数组,称为 List 。如果在Perl中需要更复杂的结构,则可以使用 List 中对其他数据结构的引用。例如,列表中的每个项目都是对另一个列表的引用。主列表可以表示行,辅助列表是该行中的列值。

在上面的foreach循环中循环显示主列表(代表每行的那个),$row等于 参考 到表示列值的列表。

为了获得Perl列表而不是列表的引用,我取消引用列表的引用。我这样做的前缀是@符号。我喜欢使用@{$row},因为我认为它比@$row更清晰。

既然我可以将我的列值列表引用为@{$row},我可以使用join创建一个字符串,用@{$row}中的每个值与制表符分隔并打印出来。

答案 4 :(得分:1)

如果你的问题中的“多维”意味着n> 2,制表符分隔格式可能不可行。

这是您想要解决更一般问题的一种情况:序列化数据结构吗?

在YAML模块中查找实例(安装YAML :: XS)。有一个DumpFile(文件路径,列表)和一个LoadFile(文件路径)方法。输出不是制表符分隔文件,但仍然是人类可读的。

您也可以使用JSON序列化程序,例如JSON :: XS。