2010-02-26 17 views
5

Quiero extraer un campo particular de un archivo csv (830k registros) y almacenar en hash. ¿Hay alguna manera rápida y fácil de hacer en Perl sin utilizar ningún método externo?¿Cómo puedo extraer campos de un archivo CSV en Perl?

¿Cómo puedo lograr eso?

+0

Muy similar a http://stackoverflow.com/questions/2174061/whats-the-best-way-to-read-a-huge-csv-file-using-perl –

Respuesta

11

Utilice Text::CSV_XS. Es rápido, moderadamente flexible y extremadamente probado. La respuesta a muchas de estas preguntas es algo sobre CPAN. ¿Por qué dedicar el tiempo a hacer algo que no es tan bueno como lo que muchas personas ya han perfeccionado y probado?

Si no desea utilizar módulos externos, lo cual es una obviedad, mire el código en Text :: CSV_XS y hágalo. Me sorprende constantemente que la gente piense que, aunque piensen que no pueden usar un módulo, no usarán una solución conocida y probada como código de ejemplo para la misma tarea.

+2

Nota: No usar módulos puede ser una requisito externo o limitación del entorno dado al que joe tiene que ajustarse. –

+2

Nota: si puede escribir código, puede instalar módulos. Es fácil explicarle a los empresarios que puede obtenerlo mejor, más barato y más rápido de esa manera. "¡Pero quiero construir una casa sin herramientas!" –

+1

Ya tenemos tantos módulos para muchos trabajos. Entonces la limitación es que no puedo usar ningún módulo externo. Pero aquí en este caso. Supongo que estaría bien usarlo. Gracias Brian – joe

-1

Véase también este code fragment tomado de The Perl Cookbook que es un gran libro en sí mismo para soluciones de Perl a problemas comunes

+1

Lamento haber vinculado una copia aparentemente pirateada del libro: el autor solía tener las partes del código en línea en el pasado, y no comprobé dos veces la fuente cuando puse el enlace. Ahora he encontrado una mejor fuente para el mismo código. –

-1

asumiendo csv normal (es decir, las comas no integrados), para llegar segundo campo, por ejemplo,

$ perl -F"," -lane 'print $F[1];' file 
-1

usando el comando dividir haría el trabajo, supongo. (Columnas de adivinanzas se separan por comas y sin comas presentes en campos)

while (my $line = <INPUTFILE>){ 
    @columns= split ('<field_separator>',$line); #field separator is "," 
    } 

y luego a partir de elementos de la matriz "columna" se puede construir cualquier hash que gusta.

+0

preguntándome por qué bajé la votación. ¿Hay algo mal con mi ejemplo? – taiko

Cuestiones relacionadas