Как напечатать все значения массива в Perl - PullRequest
8 голосов
/ 08 июля 2010

Я пытаюсь распечатать все значения массива из файла CSV. Я вроде вручную делаю это в примере ниже. Может кто-нибудь показать мне код для этого для всех полей массива, независимо от того, сколько полей есть? Я просто пытаюсь напечатать каждое поле на новой строке.

#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV_XS;

my $file = 'test.csv';

my $csv = Text::CSV_XS->new ({
    quote_char          => '"',
    escape_char         => '@',
    binary              => 1,
    keep_meta_info      => 0,
    allow_loose_quotes  => 1,
    allow_whitespace    => 1,
});


open (CSV, "<", $file) or die $!;

while (<CSV>) {
    if ($csv->parse($_)) {
        my @columns = $csv->fields();
        print "$columns[0]\r\n";
        print "$columns[1]\r\n";
        print "$columns[2]\r\n";
        print "$columns[3]\r\n";
        print "$columns[4]\r\n";
        print "$columns[5]\r\n";
        print "$columns[6]\r\n";
        print "$columns[7]\r\n";
    }
    else {
        my $err = $csv->error_input;
        print "Failed to parse line: $err";
    }
}
close CSV;

Ответы [ 5 ]

14 голосов
/ 08 июля 2010
foreach(@columns)
{
    print "$_\r\n";
}

Вместо всех столбцов [число].

8 голосов
/ 08 июля 2010

В целях отладки Data::Dump - мое предпочтительное оружие.Он в основном красиво печатает структуры данных.

use strict;
use warnings;
use Data::Dump 'dump';

# Do some stuff....

dump @array;     # Unlike Data::Dumper, there's no need to backslash ('\@array')
dump %hash;      # Same goes for hashes
dump $arrayref;  
dump $hashref;   # References handled just as well

Конечно, существует множество других способов печати массивов:

say foreach @columns;           # If you have Perl 5.10+
print $_,"\n" foreach @columns; # If you don't

print "@columns";               # Prints all elements, space-separated by default

«Лучший» ответ зависит от ситуации,Зачем тебе это?С чем ты работаешь?И для чего ты этого хочешь?Затем приправьте код соответствующим образом.

8 голосов
/ 08 июля 2010

Если вы просто хотите напечатать элементы, разделенные пробелами:

print @columns;

Если вы хотите быть немного более модным, вы можете использовать join:

print join("\n", @columns);

Если вам нужно сделать что-то еще, повторите это:

foreach (@columns) {
    # do stuff with $_
}
1 голос
/ 15 ноября 2013
{ $"="\n"; print $fh "@files"; }
1 голос
/ 08 июля 2010

Если вы делаете это для диагностических целей (в отличие от презентации), вы можете рассмотреть Data :: Dumper .В любом случае это хороший инструмент, чтобы узнать, хотите ли вы быстро распечатать более или менее произвольные данные.

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