我有一个名为@main的多维数组 我想把这个数组写入perl中的制表符分隔的.txt文件中 任何人都可以帮我解决这个问题吗?
答案 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。