• Publicidad

Extraer primeras x líneas de un fichero

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

Extraer primeras x líneas de un fichero

Notapor R_Ortiz » 2010-03-17 07:13 @342

Bueno, es una tontería básica pero estoy empezando con perl y hacía tiempo que no programaba. A ver si me podéis echar una mano.

Tengo este fichero que es una prueba que estoy haciendo. En el fichero entrada tengo varias líneas separadas por ";" y que con la función split las voy guardando en variables para luego en el fichero salida mostrar las que me interesen. La cosa es que con este código me lo hace para todas las líneas del fichero y en salida obtengo las columnas que quiero pero para todas las líneas del fichero. Es una chorrada porque sólo quiero coger las primeras 5 líneas por ejemplo. Es una chorradilla en una línea de comando a ver si me podéis echar una mano... El código que tengo es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3.   my $entrada="C:/Pruebas/entrada.txt";
  4.   my $salida ="C:/Pruebas/salida.txt";
  5.  
  6.   open (ENTRADA,"<$entrada") || die "ERROR: No puedo abrir el fichero $entrada\n";
  7.   open (SALIDA,">$salida") || die "ERROR: No puedo abrir el fichero $salida\n";
  8.  
  9.   while ($linea=<ENTRADA>)
  10.   {
  11.    my($campo1,$campo2,$campo3,$campo4) = split(/;/, $linea);
  12.   print SALIDA "$campo1;$campo3\n";
  13. }
  14.   close (ENTRADA);
  15.   close (SALIDA);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Muchas gracias de antemano y un saludo...
R_Ortiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2010-03-17 06:50 @326

Publicidad

Re: Duda Básica, extraer primeras x líneas de un fichero

Notapor explorer » 2010-03-17 07:32 @356

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

No lo he probado, pero creo sería cambiar las líneas siguientes:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while (my $linea = <ENTRADA>) {
  2.     if ( 1 .. 5 ) {                        # entramos si son las 5 primeras
  3.         my ($campo1, undef, $campo3, undef) = split(/;/, $linea);
  4.         print SALIDA "$campo1;$campo3\n";
  5.     }
  6.     else {
  7.         last;                              # salimos inmediatamente a partir de la 5ª línea
  8.     }
  9. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

He puesto undef() para los valores que no nos interesa guardar. El comparador '..' se aplica, por defecto, al valor de $., que almacena el número de líneas leídas.
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: Duda Básica, extraer primeras x líneas de un fichero

Notapor R_Ortiz » 2010-03-17 09:47 @449

Muchísimas gracias, explorer. Hace perfectamente lo que quería hacer... Sigo dándole caña a Perl y seguiré consultando... :)
R_Ortiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2010-03-17 06:50 @326

Re: Duda Básica, extraer primeras x líneas de un fichero

Notapor R_Ortiz » 2010-03-24 04:56 @247

Siguiendo más o menos en línea con esto. Partiendo de un fichero .csv de miles de líneas he conseguido extraer los campos que me interesan y organizarlos, me explico. Mi fichero .cvs de lectura es de la siguiente manera:

datodeinterés1;
campo1;campo2;campo3;campo4;
campo1;campo2;campo3;campo4;
campo1;campo2;campo3;campo4;
campo1;campo2;campo3;campo4;
datodeinterés2;
campo1;campo2;campo3;campo4;
campo1;campo2;campo3;campo4;
campo1;campo2;campo3;campo4;
campo1;campo2;campo3;campo4;
...


El fichero de salida que he conseguido es de la siguiente manera:

datodeinterés1;
campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;
datodeinterés2;
campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
...


La cosa es, que en el fichero final sólo me interesaría tener los campos que he reorganizado y borrar esas cabeceras de datos de interés, es decir, me gustaría tener este resultado:

campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;
campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
...


He conseguido quitar las cabeceras, una chorrada, pero el .csv final se me queda de esta manera:

campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;
campo1;datodeinterés1;campo4;

campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
campo1;datodeinterés2;campo4;
...


Como podéis imaginar me mete una fila en blanco que no me interesa. ¿Algunas ideas para quitarme estas líneas en blanco y que me salga todo en bloque como quiero?

¡¡Muchas gracias!!
R_Ortiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2010-03-17 06:50 @326

Re: Extraer primeras x líneas de un fichero

Notapor explorer » 2010-03-24 05:03 @252

La solución es no imprimir esas líneas. Con un next lo tienes resuelto.
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: Extraer primeras x líneas de un fichero

Notapor R_Ortiz » 2010-03-24 06:39 @318

Alguna idea para esta comparación de los ficheros e ir sacando los nuevos campos?¿ Estoy un poco atascado en este punto...

Gracias de antemano...
R_Ortiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2010-03-17 06:50 @326


Volver a Básico

¿Quién está conectado?

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