Página 2 de 2

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

NotaPublicado: 2011-06-17 18:29 @812
por mely01
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

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

NotaPublicado: 2011-06-17 18:37 @817
por explorer
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...

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

NotaPublicado: 2011-06-17 18:45 @823
por mely01
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.

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

NotaPublicado: 2011-06-17 19:40 @861
por explorer
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