2010-07-07 12 views
7

Próbuję wykonać wydruk wszystkich wartości tablicy z pliku CSV. Robię to ręcznie w poniższym przykładzie. Czy ktoś może mi pokazać kod dla tego pola dla wszystkich pól tablicy, bez względu na to, ile pól istnieje? Po prostu próbuję wydrukować każde pole na nowej linii.Jak wydrukować wszystkie wartości tablicy w Perlu

#!/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; 

Odpowiedz

11
foreach(@columns) 
{ 
    print "$_\r\n"; 
} 

Zamiast wszystkich kolumn [numer].

+0

Dziękuję. To działało świetnie! –

6

Jeśli chcesz po prostu wydrukować elementy oddzielone spacjami:

print @columns; 

Jeśli chcesz być nieco bardziej wyszukane, można użyć join:

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

Jeśli trzeba zrobić coś więcej, iteracja nad nim:

foreach (@columns) { 
    # do stuff with $_ 
} 
+0

Po prostu próbowałem funkcji łączenia i działa również świetnie. To faktycznie rozwiązuje kolejny aspekt skryptu, nad którym pracuję. Dziękuję bardzo! –

+2

Twój przykład "join" nie drukuje nowego wiersza po ostatnim elemencie. – mob

+0

@mobrule: Jeśli jest to konieczne, to bardzo proste dodawanie: 'print join (" \ n ", @columns)," \ n ";' –

1

Jeśli robisz to dla celów diagnostycznych (w przeciwieństwie do prezentacja) możesz rozważyć Dane :: Dumper. W każdym razie jest to dobre narzędzie, aby wiedzieć, czy chcesz szybki wydruk mniej lub bardziej arbitralnych danych.

+0

Sprawdzę to. Dzięki! –

8

Do celów debugowania moją ulubioną bronią jest Data::Dump. W zasadzie ładnie drukuje struktury danych.

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 

Istnieje wiele innych sposobów, aby wydrukować tablice, oczywiście:

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 

'Najlepsza' Odpowiedź zależy od sytuacji. A po co ci to? Z czym pracujesz? I czego chcesz? Następnie odpowiednio wysezonuj kod.

1
{ $"="\n"; print $fh "@files"; } 
Powiązane problemy