В Perl, как я могу писать и читать CSV-файл, составленный из ключа и массива? - PullRequest
0 голосов
/ 09 июля 2009

У меня проблема с записью и чтением файла CSV, состоящего из имени (ключа) и массива значений:

testarray.csv

foo1 ,0,0,0,0,1
foo2 ,1,0,0,0,1
foo3 ,3,4,5,6,7
.
.
.

Мне нужно представить этот файл следующим образом:

foo# будет ключом, а пять следующих чисел будут его массивом.

Каков простой способ выполнить это и отозвать его для использования (не с Dumper)? Как я могу использовать переменную из массива определенного ключа?

Например,

print $hsh{'foo1'}[4];

Ответы [ 2 ]

6 голосов
/ 09 июля 2009

Обычно я бы порекомендовал Text :: xSV и / или Text :: CSV , но для таких простых данных прямое join должно работать:

#!/usr/bin/perl

use strict;
use warnings;

my %hash = (
    foo1 => [ 0, 0, 0, 0, 1 ],
    foo2 => [ 1, 0, 0, 0, 1 ],
    foo3 => [ 3, 4, 5, 6, 7 ],
);

for my $key ( sort keys %hash ) {
    print join( q{,}, $key, @{ $hash{$key} } ), "\n";
}

__END__

Выход:

C:\Temp> ttt
foo1,0,0,0,0,1
foo2,1,0,0,0,1
foo3,3,4,5,6,7

Чтение в:

#!/usr/bin/perl

use strict;
use warnings;

my %hash;

while ( <DATA> ) {
    chomp;
    last unless /\S/;
    my ($key, @data) = split /,/;
    $hash{$key} = \@data;
}

print $hash{foo2}->[4], "\n";

__DATA__
foo1,0,0,0,0,1
foo2,1,0,0,0,1
foo3,3,4,5,6,7

Выход:

C:\Temp> ttt
1
4 голосов
/ 09 июля 2009

Решение Синан Унура хорошо и правильно, но я думаю, что проблема OP - это проблема XY . Он специально спрашивает о чтении и хранении данных из файла CSV. Поскольку это, кажется, реальная цель, то лучшее решение состоит в том, чтобы использовать повторное использование и установить Text :: CSV в свой Perl. Он выполняет тяжелую работу с файлами CSV, дает вам возможность ссылаться на все данные и при этом предоставляет хороший API.

Если это не сработает, вы можете попробовать DBD :: CSV , который вместе с DBI даст вам возможность использовать SQL для запроса / вставки / обновить CSV. Если вы привыкли к SQL, это также отличный способ.

Edit:

Исходя из простой природы данных, если вы действительно хотите свернуть свои собственные, его решение хорошее, уже дало + 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...