• Publicidad

Introducir cabecera en un csv

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

Introducir cabecera en un csv

Notapor enric73 » 2013-10-24 03:02 @168

Hola, perleros,

Dispongo de un fichero formato CSV con el siguiente contenido:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Tomates,10,12,9,13
Peras,19,20,22,18
Manzanas,15,20,22,17
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Quiero añadir la siguiente línea como primera fila:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Frutas,1,2,3,4
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Pero este fichero CSV puede tener un número diferente de columnas, es decir, que el formato, de la primera línea tiene que ser, Frutas, 1,2,...,N-1

¿Alguien puede ayudarme?

Gracias, estaré agradecido.
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Publicidad

Re: Introducir cabecera en un csv

Notapor explorer » 2013-10-24 06:39 @319

Abres el archivo y lees todas las líneas, a un array (cada línea en cada elemento del array)
Lees del array la primera línea.
Partes esa línea por las comas, y así sabes el número de columnas.
Creas la cabecera, con algo así como esto (no probado):

my $cabecera = join "'", 'Frutas', 1 .. $numero-1;

Abres en modo de escritura el csv.
Imprimes la cabecera, y el resto de las líneas.
Cierras.
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: Introducir cabecera en un csv

Notapor enric73 » 2013-10-27 17:24 @766

Hola, explorer.

Finalmente he escrito este script siguiendo tus indicaciones. Funciona, pero posiblemente tu lo harías de otra manera... Si es así, me gustaría conocerla. ¿A lo mejor utilizando el módulo Text::CSV?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/local/bin/perl
  2. use v5.10;
  3. use autodie;
  4. use lib '/home/enric/perl5/lib/perl5/';
  5. chdir("$ENV{HOME}/csv");
  6.  
  7. my $i;
  8. open( my $infile, "<", "Barcelona.csv" ) or die $!;
  9. open( $outfile, "> Barcelonaout.csv" ) || die "No se puede abrir el archivo\n";
  10.  
  11. $registro  = <$infile>;
  12. @campo     = split( ",", $registro );
  13. $arraySize = scalar(@campo);
  14. print my $cabecera = join ",", 'Frutas', 1 .. $arraySize - 1;
  15. print $outfile $cabecera . "\n";
  16. close($infile);
  17.  
  18. open( my $infile2, "<", "Barcelona.csv" ) or die $!;
  19. while ( $registro2 = <$infile2> ) {
  20.     chop($registro2);
  21.     print $outfile $registro2 . "\n";
  22.     $i++;
  23. }
  24.  
  25. close($infile2);
  26. close($outfile);
  27.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Gracias.
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Introducir cabecera en un csv

Notapor explorer » 2013-10-27 21:37 @942

(no probado)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/local/bin/perl
  2. use v5.10;
  3. use autodie;
  4.  
  5. chdir "$ENV{HOME}/csv";
  6. my $archivo = 'Barcelona';
  7.  
  8. open my $INFILE, '<', "$archivo.csv";          # Abres el archivo y lees todas las líneas, a un array
  9. my @archivo = <$INFILE>;
  10. close $INFILE;
  11.  
  12. my $primera = $archivo[0];                     # Lees del array la primera línea.
  13.  
  14. my $n_columnas = split /[,]/, $primera;        # Partes esa línea por las comas, y así sabes el número de columnas
  15.  
  16. my $cabecera = join q[,], 'Frutas', 1 .. $n_columnas-1;        # Creas la cabecera
  17.  
  18. open my $OUTFILE, '>', "${archivo}out.csv";   # Abres en modo de escritura el csv.
  19. print   $OUTFILE "$cabecera\n";               # Imprimes la cabecera,
  20. print   $OUTFILE @archivo;                    # y el resto de las líneas.
  21. close   $OUTFILE;                             # Cierras.
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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


Volver a Básico

¿Quién está conectado?

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

cron