2013-03-27 6 views
0

Как я могу вывести 2-мерный массив в файл csv в perl?Как вывести 2-мерный массив в файл csv в perl

Например, я построил одномерный массив как:

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

И я хочу, чтобы вывести его в CSV-файл для дальнейшего использования. И этот файл csv следует читать и реконструировать в 2-мерный массив. используя код как:

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; 

Что такое эффективный способ сделать это?

+1

Что мешает вам выполнять 'для моей строки $ (@data) {$ csv-> print (* OUT, $ row); } 'для печати файла csv? Если вы намерены его прочитать, было бы разумно, что это так, как вы его пишете. – TLP

ответ

2

Как обычно, 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». Это не похоже на то, что ваш случай будет затронут.

+0

Прошу прощения, но это не то, что я хочу. Функция привязки фактически извлекает содержимое из файла csv и помещает его в двумерный массив. Я хочу напечатать двухмерный массив в файле csv. Вы знаете, как это сделать? – user2214280

+1

На самом деле модуль делает это тоже. Я прокомментировал строку «print ...»: если вы запустите код, вы найдете файл с именем «filename» в каталоге, в котором вы запускали скрипт. Он будет содержать три пустые строки и один, содержащий «,, ,,, верблюд». Строки - это размерность подгонки массива, а столбцы - вторая. – simone