• Publicidad

Extraer varias líneas delimitadas por dos líneas especiales

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

Re: Extraer varias líneas delimitadas por dos líneas especiales

Notapor mely01 » 2011-06-17 18:29 @812

Hola, muy buen material, pero el problema que me surgió es que no puedo colocar la información que me interesa en varios archivos.

Es decir, ¿cómo podríamos pasar cada bloque de información delimitada a millones de archivos individuales?

La información que extraigo comienza con '$$$$' y termina con <From>.

Yo así extraigo lo que me interesa pero solo lo imprimo por pantalla o lo puedo pasar a un solo archivo individual en la consola: perl cod.pl archivo.txt >salida
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while (<>) {
  2.   if (/\$\$\$\$/../\<From\>/) {
  3.     next if /\$\$\$\$/ || /\<From\>/;
  4.     print ;
  5.     }
  6. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
mely01
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-09-01 23:02 @001

Publicidad

Re: Extraer varias líneas delimitadas por dos líneas especiales

Notapor explorer » 2011-06-17 18:37 @817

Bienvenido a los foros de Perl en español, mely01.

No entiendo la pregunta. ¿Quieres filtrar millones de archivos para extraerles la información, o quieres meter la información a millones de archivos?

Necesitamos un detalle mayor del problema...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Extraer varias líneas delimitadas por dos líneas especiales

Notapor mely01 » 2011-06-17 18:45 @823

Gracias por responder, y tal vez me expliqué mal, pero necesito extraer la información (delimitada) de un solo archivo y meterla a millones de archivos individuales.

Por ejemplo: mi archivo
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$$$$ informacion1 <From> basura basura
$$$$ informacion2 <From> basura basura
$$$$ informacion3 <From> basura basura
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

... muchas veces

Y necesito que informacion1 quede en un archivo, informacion2 en otro archivo y así sucesivamente.

Espero que ahora puedan entenderme y de antemano, muchísimas gracias.
mely01
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-09-01 23:02 @001

Re: Extraer varias líneas delimitadas por dos líneas especiales

Notapor explorer » 2011-06-17 19:40 @861

No dices nada de cómo se llaman esos millones de archivos, o si esos millones de archivos ya existen y hay que agregarles la información o, quizás lo más sencillo: sacar la información de entre la basura, y convertirla en el contenido de los millones de archivos.

Esta es una manera (no probada):
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. my $archivo = "archivo_00000001";          # nombre de los archivos a crear
  8. my $contenido;                             # aquí vamos guardando el contenido de cada rango
  9.  
  10. while (<>) {                               # leemos las líneas desde la entrada estándar
  11.     if (/\${4}/ .. /<From>/) {             # si estamos dentro del rango de líneas interesantes...
  12.         if (/<From>/) {                    # si estamos en la última línea de un rango
  13.             open my $FILE, '>', $archivo;  # abrimos el $archivo en modo escritura
  14.             print   $FILE $contenido;      # guardamos el $contenido
  15.             close   $FILE;
  16.  
  17.             $archivo++;                    # cambiamos el nombre del próximo $archivo
  18.  
  19.             $contenido = '';               # reiniciamos a $contenido vacío
  20.  
  21.             next;                          # saltamos a siguiente línea
  22.         }
  23.  
  24.         $contenido .= $_;                  # para todas las demás líneas del rango, las guardamos como $contenido
  25.     }
  26. }
Coloreado en 0.001 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: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

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