【问题标题】:How to output a 2 dimensional array to a csv file in perl如何在perl中将二维数组输出到csv文件
【发布时间】:2013-03-27 05:08:34
【问题描述】:

如何在 perl 中将二维数组输出到 csv 文件?

例如我构造了一个维度数组:

for my $i(0..100) {
    for my $j (0..50) {
        $data[$i][$j]=0;
    } 
}

我想将其输出到 csv 文件以供将来参考。 并且这个 csv 文件应该被读取并重建为二维数组。 使用如下代码:

my $outfilename="output.csv"; 
my $csv = Text::CSV->new;
open OUT , '<', $outfilename or die "Could not open $outfilename: $!";

while( my $row = $csv->getline( OUT ) ) { 
    push @output, $row;
}
close OUT;

什么是有效的方法?

【问题讨论】:

  • 是什么阻止您使用for my $row (@data) { $csv-&gt;print(*OUT, $row); } 打印 csv 文件?如果这就是您打算阅读它的方式,那么它也是您编写它的方式是有道理的。

标签: perl csv printing multidimensional-array output


【解决方案1】:

像往常一样,CPAN 是你的朋友:你可以使用Tie::Array::CSV

文档中的示例看起来很像您需要的:

use strict; use warnings;
use Tie::Array::CSV;
tie my @file, 'Tie::Array::CSV', 'filename';

# print $file[0][2];
$file[3][5] = "Camel";

至于效率,就您的时间而言,它看起来非常有效。该模块有一个警告说“某些操作可能非常低效[...](例如)(un)shift-ing”。不过,您的案件似乎不会受到影响。

【讨论】:

  • 很抱歉,但这不是我想要的。 tie 函数实际上是从 csv 文件中提取内容并将其放入二维数组中。我想要的是将二维数组打印到 csv 文件。你知道怎么做吗?
  • 其实这个模块也是这样做的。我已经注释掉了“print...”行:如果您运行代码,您会在运行脚本的目录中找到一个名为“filename”的文件。它将包含三个空行和一个包含“,, ,,,骆驼”。行是数组的拟合维度,列是第二个。
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多