• Publicidad

Imprimir una línea y las siguientes a esa, hasta un tope

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

Imprimir una línea y las siguientes a esa, hasta un tope

Notapor boteropepe » 2010-06-02 11:45 @531

Hola, quiero hacer un programa en el que, según aparezca cierta información en cada línea, ésta se imprima o no; hay un caso en que la información que quiero obtener aparece en varias líneas, pero no sé cómo decir que se imprima desde la línea 'x' hasta la línea 'y' que me sirva de tope. Pongo un ejemplo de texto, por si sirve:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$IN... Nombre: Paco
$IN... Edad: 38
$IN... Estado civil: casado
$IN... Número de hijos:
$IN...                0
$IN...                1
$IN...                2       [con un número de líneas variable en este caso]
$IN... Sexo:
$IN...        hombre
$IN...        mujer
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


En este texto, solo querría sacar la línea referida a la edad y las líneas referidas al número de hijos. De momento, lo he hecho con 'if', 'elsif', etc. (si la línea contiene 'Edad', imprime), pero no sé cómo recuperar todas las líneas del campo 'Número de hijos' de ese modo (teniendo en cuenta que no se sabe cuántas líneas van a aparecer tras la primera referida al número de hijos y que 'Sexo' siempre funcionará como tope). He probado a utilizar '$´', pero no sé por qué no me sirve de nada; también he indefinido '$/' para poder incluir más de una línea en $_, pero no sé cómo decir que la línea 'Sexo' sirve de tope... Nada, que no sé cómo hacerlo.

Muchas gracias de antemano
boteropepe
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2010-03-08 15:14 @676

Publicidad

Re: imprimir una línea y las siguientes a esa, hasta un tope

Notapor explorer » 2010-06-02 12:48 @575

Puedes usar banderas, para saber en qué sección estás.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use utf8;
  6. use open 'locale';
  7.  
  8. my $en_sección_hijos = 0;
  9.  
  10. while (<DATA>) {
  11.     chomp;
  12.  
  13. ### Cambios de sección
  14.     if (/hijos/) {              # si estamos con los hijos
  15.         $en_sección_hijos = 1;  # lo indicamos en la bandera
  16.         next;                   # y pasamos a la siguiente línea
  17.     }
  18.  
  19.     if (/Sexo/) {               # si hemos llegado al sexo
  20.         $en_sección_hijos = 0;  # los hijos se acabaron
  21.         next;                   # y pasamos a la siguiente línea
  22.     }
  23.  
  24. ### Secciones
  25.     if ($en_sección_hijos) {    # si estamos con los hijos
  26.         print "Hijo: $_\n";     # lo mostramos
  27.         next;                   # y pasamos a la siguiente línea
  28.     }
  29.  
  30. ### Entradas normales
  31.     if (/(.*?):\s*(.*)/) {      # ejemplo de una entrada cualquiera
  32.         print "$1: $2\n";
  33.     }
  34.  
  35.     # ...
  36. }
  37.  
  38. __DATA__
  39. $IN... Nombre: Paco
  40. $IN... Edad: 38
  41. $IN... Estado civil: casado
  42. $IN... Número de hijos:
  43. $IN...                0
  44. $IN...                1
  45. $IN...                2
  46. $IN... Sexo:
  47. $IN...        hombre
  48. $IN... Nombre: Carmen
  49. $IN... Edad: 35
  50. $IN... Estado civil: casado
  51. $IN... Número de hijos:
  52. $IN...                0
  53. $IN...                1
  54. $IN... Sexo:
  55. $IN...        mujer
Coloreado en 0.003 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 una línea y las siguientes a esa, hasta un tope

Notapor boteropepe » 2010-06-07 06:44 @322

¡Muchas gracias!
boteropepe
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2010-03-08 15:14 @676


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 17 invitados