• Publicidad

Dividir un archivo de texto en varios

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

Dividir un archivo de texto en varios

Notapor agaton » 2010-03-10 13:15 @594

Hola, mi problema es bastante sencillo pero hasta el momento no he conseguido resolverlo. Supongamos que tengo un archivo de texto que contiene:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
nombre
paco
juan
jose
nombre
luis
rafa
bruno
nombre
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

... (y así sucesivamente)

¿Cómo puedo hacer para dividirlo en archivos que contengan desde una línea "nombre" hasta la siguiente?

Un saludo.
agaton
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-12-12 19:07 @838

Publicidad

Re: Dividir un archivo de texto en varios

Notapor explorer » 2010-03-10 18:35 @816

Algo así (pero no exactamente) (una de varias soluciones):

* Bucle para todas las filas
* Si la fila es 'nombre', cierras el fichero abierto antes y abres uno nuevo, y salto a la siguiente
* Pinto la fila en el fichero
* Fin del bucle
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: Dividir un archivo de texto en varios

Notapor agaton » 2010-03-11 07:52 @369

Gracias explorer, no se me había ocurrido ese planteamiento. Dejo el código final por si a alguien le resulta de utilidad en un futuro.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl -w
  2.  
  3. print "¿Nombre del archivo?";
  4. $molin = <STDIN>;
  5. chomp $molin;
  6.  
  7. open(MOLIN,"$molin") || die "No pude abrir $molin: $!";
  8.  
  9. $idmol = 1;
  10. open(MOLOUT,">$idmol.mol2");
  11.         $line = <MOLIN>;
  12.         chomp $line;
  13.         print MOLOUT "$line\n";
  14.  
  15. while($line = <MOLIN>) {
  16.  
  17.         chomp $line;
  18.  
  19.         if ($line =~ /^@<TRIPOS>MOLECULE/) {
  20.  
  21.           close(MOLOUT);
  22.           $idmol = $idmol + 1;
  23.           open(MOLOUT,">$idmol.mol2");
  24.           print MOLOUT "$line\n";
  25.  
  26.  
  27.         } else {
  28.             print MOLOUT "$line\n";
  29.         }
  30. }
  31.  
  32. close(MOLIN) || die "No puedo cerrar $molin: $!";
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4



Saludos.
agaton
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-12-12 19:07 @838


Volver a Básico

¿Quién está conectado?

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