• Publicidad

Imprimir líneas hasta una marca

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

Imprimir líneas hasta una marca

Notapor colorado » 2011-04-22 09:09 @423

Tengo las siguientes líneas, en un archivo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
hola
me llamo
colorado

lo
demás

no me interesa
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


lo que quiero es que imprima hasta el primer vacío,
para que el texto quede:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
hola
me llamo
colorado
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Publicidad

Re: Imprimir líneas hasta una marca

Notapor explorer » 2011-04-22 10:24 @475

Bueno, se puede usar el operador rango:

1 .. /^$/

Con esto, sacamos las líneas que hay entre la primera línea (1) y la primera línea que está vacía (/^$/), incluyendo ambas.

Aquí hay un problema: dices que no quieres sacar la línea que está en blanco, así que hay que buscar una manera de saber cuándo estamos en esa última línea.

El operador rango devuelve un escalar que indica el número de línea, dentro del rango, que ha encontrado. Y, esto es lo importante, el último valor lleva una 'E' al final, para indicar que es la última línea del rango que hemos encontrado.

Entonces, queda un pelo más complicado, pero fácil de entender:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5. use autodie;
  6.  
  7. open my $fichero, q[<], 'kk.txt';
  8.  
  9. while (<$fichero>) {                  # leemos una línea
  10.     if (my $estado = 1 .. /^$/) {     # si la línea está entre la 1 y la primera vacía
  11.         if($estado !~ /E/) {          # si esa línea no es la última,
  12.             print;                    # la imprimimos
  13.         }
  14.     }
  15.     else {
  16.         last;                         # estamos fuera del rango que nos interesa: terminamos el bucle
  17.     }
  18. }
  19.  
  20. close $fichero;
Coloreado en 0.006 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

Re: Imprimir líneas hasta una marca

Notapor colorado » 2011-04-22 11:00 @500

Perfecto, y muy buena la explicación.
Muchas gracias
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658


Volver a Básico

¿Quién está conectado?

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