• Publicidad

Ayuda con manejo de archivo CSV

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Ayuda con manejo de archivo CSV

Notapor JoshZeta » 2015-08-20 12:05 @545

Buenos días, tengo una consulta sobre un script que estoy desarrollando para cambiar el formato a un archivo CSV.

Tengo un archivo CSV del cual solo quiero extraer determinadas columnas y todas las filas menos la segunda (primer problema), e insertarlo en otro archivo CSV. Pero el archivo origen es dinámico, mejor dicho: cambia el nombre de éste (segundo problema).

Hasta ahorita ya tengo un desarrollo con la ayuda de la biblioteca Text::ParseWords.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Text::ParseWords;
  3.  
  4. my ( $i, $archivo_final );
  5.  
  6. open( FORMAT_FONT, "</home/osboxes/Desktp/pmresult_50331650_60_201505312300_2015061000.csv" )
  7.   || die "No se puede abrir el archivo\n";
  8. open( FORMAT_DO, ">salida.csv" )
  9.   || die "No se puede crear el archivo\n";
  10.  
  11. chmod 0777, "salida.csv";
  12.  
  13. while ( $registro = <FORMAT_FONT> ) {
  14.     chomp;
  15.     @campo = quotewords( ",", 0, $registro );
  16.     $archivo_final = "$campo[0],$campo[2],$campo[5]";
  17.     open( FORMAT_SCAPI, "salida.csv" ) || die "No se puede abrir el archivo\n";
  18.     print FORMAT_SCAPI $archivo_final . "\n";
  19.     $i++;
  20. }
  21. close(FOMAT_FONT);
  22. print "\n\t Operación realizada con éxito";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Gracias por la ayuda, de antemano :)
JoshZeta
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2015-08-20 11:40 @527

Publicidad

Re: Ayuda con manejo de archivo CSV

Notapor explorer » 2015-08-20 14:52 @661

Bienvenido a los foros de Perl en Español, JoshZeta.

Para el primer problema, te vale con poner un
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     next if $. == 2;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
al principio del while(). Mas información en perlvar.

Para el segundo problema, lo que se podría hacer es que el nombre del archivo a procesar se pasase como argumento al programa (en la línea de comando). Y dentro del programa, usamos el array especial @ARGV para leerlo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open( FORMAT_FONT, "<$ARGV[0]" )
  2.   || die "No se puede abrir el archivo\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Hay... también algunos errores...
  • Vuelves a abrir salida.csv en modo lectura para cada registro leído. El efecto neto es que no escribes es $archivo_final
  • La variable $i es un contador, pero no se usa para nada más
Te pongo una versión revisada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use autodie;                    # Es mejor morir que regresar con deshonor. --Proverbio Kinglon
  3. use Text::ParseWords;
  4.  
  5. open my $FORMAT_FONT, '<', $ARGV[0];
  6.  
  7. my $SALIDA = 'salida.csv';
  8.  
  9. open my $FORMAT_DO,   '>', $SALIDA;
  10.  
  11. chmod 0777, $SALIDA;
  12.  
  13. my $i = 0;
  14. while ( my $registro = <$FORMAT_FONT> ) {
  15.     next if $. == 2;                                    # salta al siguiente si es la segunda línea
  16.     chomp $registro;                                    # cortamos el final
  17.  
  18.     my @campos = quotewords( ",", 0, $registro );       # extraemos campos
  19.     my $archivo_final = join ',', @campos[0,2,5];       # composición
  20.  
  21.     print $FORMAT_DO "$archivo_final\n";                # salida
  22.  
  23.     $i++;
  24. }
  25. close $FORMAT_FONT;
  26. close $SALIDA
  27.  
  28. print "\n\tOperación realizada con éxito: $i registros procesados.\n";
  29.  
  30. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Hay un módulo mejor para tratar con este tipo de archivos: Text::CSV
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda con manejo de archivo CSV

Notapor JoshZeta » 2015-08-21 10:30 @479

Buenos días, explorer. Muchas gracias por tu ayuda, ¡¡me sirvió de mucho!! También tomare en cuenta tu consejo de usar Text::CSV.

Nuevamente, ¡¡¡ gracias y saludos !!! :D
JoshZeta
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2015-08-20 11:40 @527


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados