2010-07-07 16 views
7

Estoy tratando de imprimir todos los valores de una matriz desde un archivo CSV. Estoy haciendo esto manualmente en el ejemplo a continuación. ¿Puede alguien mostrarme el código para hacer esto para todos los campos de la matriz sin importar cuántos campos haya? Básicamente, estoy tratando de imprimir cada campo en una nueva línea.Cómo imprimir todos los valores de una matriz en Perl

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

Respuesta

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

En lugar de todas las columnas [número].

+0

Gracias. Eso funcionó muy bien! –

6

Si lo que desea es imprimir los elementos separados por espacios:

print @columns; 

Si quieres ser un poco más sofisticado, puede utilizar join:

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

Si lo que necesita hacer algo más, iterar sobre él:

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

Acabo de probar la función de unión y también funciona muy bien. Eso realmente resuelve otro aspecto del guión en el que estoy trabajando. ¡Muchas gracias! –

+2

Su ejemplo 'join' no imprime una nueva línea después del último elemento. – mob

+0

@mobrule: si esto es necesario, entonces es trivial agregar: 'print join (" \ n ", @columns)," \ n ";' –

1

Si lo hace con fines de diagnóstico (en comparación con presentación) puede considerar Data :: Dumper. En cualquier caso, es una buena herramienta para saber si desea una impresión rápida de datos arbitrarios más o menos.

+0

Lo verificare. ¡Gracias! –

8

Para depuración, Data::Dump es mi arma de elección. Básicamente imprime estructuras de datos.

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 

hay muchas otras maneras de imprimir las matrices, por supuesto:

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 

El 'mejor' respuesta depende de la situación. ¿Por qué lo necesitas? ¿Con que estás trabajando? ¿Y para qué lo quieres? Luego sazone el código en consecuencia.

1
{ $"="\n"; print $fh "@files"; } 
Cuestiones relacionadas