2009-09-18 16 views

Respuesta

24

Puede usar Class:CSV.

use Class::CSV; 

my $csv = Class::CSV->new(
    fields   => [qw/userid username/] 
); 

$csv->add_line([2063, 'testuser']); 
$csv->add_line({ 
    userid => 2064, 
    username => 'testuser2' 
}); 

$csv->print(); 

# 2063,testuser 
# 2064,testuser2 

Editar: Para más bibliotecas, puede search CPAN.

17

Utilizamos generalmente Text::CSV_XS (que la mencionada Class::CSV se basa en)

ACTUALIZACIÓN: comentaristas a continuación también sugieren el uso de Text::CSV que cargar hasta Text::CSV_XS o, si eso no es avialable, caer de nuevo Text::CSV_PP que no tiene dependencia de XS y puede ser más fácil de instalar.

+6

Esta es la mejor opción. Text :: CSV_XS está altamente optimizado y cuenta con una API suave. Lo usamos todo. El autor también es, en mi opinión, el más receptivo de todos los CPAN, se enorgullece del módulo y proporciona soporte de primera clase. Text :: CSV_PP también es una excelente alternativa si no puede compilar para _XS, ideal si lo necesita más adelante. Lo correcto sucederá en estos días si simplemente usa Text :: CSV –

+2

De acuerdo con esa última frase: simplemente use Text :: CSV y cargará Text :: CSV_XS si está disponible o recurrirá a Text :: CSV_PP si el sistema no tiene instalada la versión XS. –

+1

@szabgab ¿Puedes dar un ejemplo de cómo crear un CSV con Text :: CSV en tu respuesta? Estoy leyendo la documentación y parece extremadamente centrado en el análisis de CSV, no muy claro sobre cómo crear uno. –

9

Hay más de una forma de hacerlo.

  • DBD::CSV - Use SQL para leer y escribir archivos CSV.
  • Text::CSV - Crea y analiza archivos CSV una línea a la vez. Este es prácticamente el estándar de oro para la manipulación de CSV.
  • POE::Filter::CSV - Proporciona un filtro CSV para su componente POE IO.
  • Data::Tabular::Dumper::CSV - Volcar una tabla directamente en un archivo CSV (los objetos con la misma interfaz pueden volcar a archivos XML o MS Excel).

Hay muchos otros en CPAN, también.

Por supuesto, se podría ignorar todo esto y sólo tiene que utilizar un bucle, una combinación y una impresión:

my @table = (
    [ 'a', 'b', 'c'], 
    [ 1, 2, 3 ], 
    [ 2, 4, 6 ], 
); 

for my $row (@table) { 
    print join(',', @$row), "\n"; 
} 

Sólo tiene que ejecutar la secuencia de comandos y redirigir la salida a un archivo, bang! estás listo. O puede volverse loco y open un identificador de archivo e imprimir directamente en un archivo.

Pero no manejará campos multilínea, comas incrustadas o cualquiera de las muchas otras rarezas que pueden surgir en este tipo de tareas de procesamiento de datos. Así que ten cuidado con este enfoque.

Mis recomendaciones:

  • Si está creando una aplicación POE , utilizan POE :: Filtro.
  • Si usted es un monstruo SQL/DBI y sueña en SQL, o puede necesitar reemplazar la salida CSV con una conexión de base de datos real , use DBD :: SQL.
  • Si tiene de datos simples y está improvisar un pequeño script sucia de usar y tirar a formato de algunos datos de la hoja de cálculo de digerir, el uso de impresión y unirse a - hacer esto para ningún código con una expectativa de vida de más de 2 horas.
  • Si desea desechar un blob de datos en un CSV o XML use Data :: Tabular :: Dumper :: CSV.
  • Si está escribiendo algo que necesita ser estable, fácil de mantener y rápido, y necesita el máximo control para la entrada y la salida, use Text :: CSV. (Tenga en cuenta que POE :: Filter :: CSV, Data :: Tabular :: Dumper :: CSV y DBD :: CSV usan Text :: CSV o Text :: CSV_XS como para el procesamiento de back-end).
Cuestiones relacionadas