• Publicidad

Extraer líneas

¿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 líneas

Notapor explorer » 2012-04-11 08:59 @416

El profesor dice que hay que editarlo "manualmente", así que no hay que hacer ningún programa para extraer lo que queremos. Solo hay que abrir el archivo con algún editor que entienda RTF (por ejemplo, el paquete libreoffice puede hacerlo), y desde allí lo grabas como archivo de texto plano.

Y ya solo queda hacer el programa para que extraiga las líneas BASURA...
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

Publicidad

Re: Extraer líneas

Notapor pedro19 » 2012-04-11 09:35 @441

¡¡Problema resuelto!! Simplemente trasladé el contenido del rtf a un documento de texto plano, y lo demás con su ayuda conseguí sacarlo.

¡¡Muchas gracias!!, pronto seguiré intentando solucionar mis nuevas dudas :)
pedro19
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-04-10 18:24 @808

Re: Extraer líneas

Notapor alexclipse » 2012-04-11 10:10 @465

Yo aun no lo he resuelto, ¡je,je!

Tengo esto (después de quitar el "\n" de cada variable):

my ($b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9);
my $origen = "texto1.txt";
my $resultado = "resultado.txt";
open (FILEHANDLE, $origen) || die "No se pudo abrir el archivo \"$infile\": $!";
open (FILEHANDLE2, ">$resultado") || die "No se pudo abrir el archivo \"$infile\": $!";
$b1=<FILEHANDLE>;
if ($b1 =~ /BASURA/) { # Si la línea correspondiente a b1 contiene basura
$resultado -= $b1;} # Al archivo le elimino la línea
else {print "$b1" and $resultado += $b1}; # Si no, imprimo la línea en la línea de comandos
# Y la añado al archivo resultado.
$b2=<FILEHANDLE>;
if ($b2 =~ /BASURA/) {
$resultado -= $b2;}
else {print "$b2" and $resultado += $b2};
$b3=<FILEHANDLE>;
print "$b3";
$b4=<FILEHANDLE>;
print "$b4";
$b5=<FILEHANDLE>;
print "$b5";
$b6=<FILEHANDLE>;
print "$b6";
$b7=<FILEHANDLE>;
print "$b7";
$b8=<FILEHANDLE>;
print "$b8";
$b9=<FILEHANDLE>;
print "$b9";
close (FILEHANDLE);

Sin embargo el programa me crea el archivo resultado, me imprime la línea 1 y no la 2, pero no escribe la línea 1 en el archivo resultado. ¿A qué se debe?
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Re: Extraer líneas

Notapor explorer » 2012-04-11 10:34 @482

Te vuelvo a decir que el operador '-=' es numérico. Lo mismo para '+='

No tiene sentido para operandos que son cadenas de caracteres...

Piénsalo de esta manera: si la línea contiene BASURA... no es necesario imprimirla...
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: Extraer líneas

Notapor alexclipse » 2012-04-11 10:42 @487

Ya casi que lo tengo pero sigo con un pequeño error:

my ($b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9);
my $origen = "texto1.txt";
my $resultado = "resultado.txt";
open (FILEHANDLE, $origen) || die "No se pudo abrir el archivo \"$infile\": $!";
open (FILEHANDLE2, ">$resultado") || die "No se pudo abrir el archivo \"$infile\": $!";
$b1=<FILEHANDLE>;
if ($b1 =~ /BASURA/) {
$resultado -= $b1;}
else {print "$b1" and print FILEHANDLE2 "$b1"};
$b2=<FILEHANDLE>;
if ($b2 =~ /BASURA/) {
$resultado -= $b2;}
else {print "$b2" and print FILEHANDLE2 "$b2"};
$b3=<FILEHANDLE>;
if ($b1 =~ /BASURA/) {
$resultado -= $b1;}
else {print "$b1" and print FILEHANDLE2 "$b3"};
$b4=<FILEHANDLE>;
if ($b1 =~ /BASURA/) {
$resultado -= $b1;}
else {print "$b1" and print FILEHANDLE2 "$b4"};
$b5=<FILEHANDLE>;
if ($b1 =~ /BASURA/) {
$resultado -= $b1;}
else {print "$b1" and print FILEHANDLE2 "$b5"};
$b6=<FILEHANDLE>;
if ($b1 =~ /BASURA/) {
$resultado -= $b1;}
else {print "$b1" and print FILEHANDLE2 "$b6"};
$b7=<FILEHANDLE>;
if ($b1 =~ /BASURA/) {
$resultado -= $b1;}
else {print "$b1" and print FILEHANDLE2 "$b7"};
$b8=<FILEHANDLE>;
if ($b1 =~ /BASURA/) {
$resultado -= $b1;}
else {print "$b1" and print FILEHANDLE2 "$b8"};
$b9=<FILEHANDLE>;
if ($b1 =~ /BASURA/) {
$resultado -= $b1;}
else {print "$b1" and print FILEHANDLE2 "$b9"};
close (FILEHANDLE);
close (FILEHANDLE2);

El error es que siempre me imprime la misma linea en pantalla y en resultado solo me elimina la primera linea con basura, el resto aparece
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Re: Extraer líneas

Notapor alexclipse » 2012-04-11 10:45 @489

Problema solucionado. Era cuestión de los números. Al copiar y pegar me olvidé de cambiar el número de las variables. Ya me funciona el programa. Muchas gracias por la ayuda, de nuevo.
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Re: Extraer líneas

Notapor explorer » 2012-04-15 20:29 @895

¿Te diste cuenta de que te sobraban todas las líneas de la forma

$resultado -= ...

?
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: Extraer líneas

Notapor alexclipse » 2012-04-18 11:15 @511

Pues la verdad que no las he quitado. Al final lo volvi a cambiar para hacerlo mas eficiente y presenté esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my ($b1);
  2. my $origen    = "texto1.txt";
  3. my $resultado = "pruebafin.txt";
  4. open( FILEHANDLE,  $origen )       || die "No se pudo abrir el archivo \"$infile\": $!";
  5. open( FILEHANDLE2, ">$resultado" ) || die "No se pudo abrir el archivo \"$infile\": $!";
  6. while ( $b1 = <FILEHANDLE> ) {
  7.     if ( $b1 =~ /BASURA/ ) {
  8.         $resultado -= $b1;
  9.     }
  10.     else { print "$b1" and print FILEHANDLE2 "$b1" }
  11. }
  12. close(FILEHANDLE);
  13. close(FILEHANDLE2);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2012-04-18 11:54 @538, editado 1 vez en total
Razón: Formateado de código con Perltidy y poner marcas Perl
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Re: Extraer líneas

Notapor explorer » 2012-04-18 12:01 @542

¡Claro!

Repasa las líneas 7 y siguientes:
  • Si $b1 contiene BASURA...
  • hacemos algo MUY raro (de hecho, no hacemos nada)
  • si no,
  • sacamos la línea a pantalla y al archivo de salida.
Como ves, esa operación '-=' no sirve para nada, porque lo que quieres es sacar las líneas que no contienen BASURA.

Esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $linea;
  2. my $origen    = "texto1.txt";
  3. my $resultado = "pruebafin.txt";
  4.  
  5. open my $ENTRADA, '<', $origen    or die "No se pudo leer el archivo [$origen]: $!\n";
  6. open my $SALIDA,  '>', $resultado or die "No se pudo escribir en el archivo [$resultado]: $!\n";
  7.  
  8. while ( $linea = <$ENTRADA> ) {    # para cada $linea de la $ENTRADA
  9.     if ( $linea !~ /BASURA/ ) {    # si la $linea no contiene BASURA
  10.         print         $linea;      # la sacamos a pantalla
  11.         print $SALIDA $linea;      # y a la $SALIDA
  12.     }
  13. }
  14.  
  15. close $ENTRADA;
  16. close $SALIDA;
  17.  
Coloreado en 0.002 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: Extraer líneas

Notapor alexclipse » 2012-04-19 07:58 @374

O sea, que lo que yo he hecho ha sido decirle que si tiene basura, "no hagas nada", ¿no?
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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