• Publicidad

Problema con el borrado de línea

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

Problema con el borrado de línea

Notapor later » 2008-03-09 06:54 @329

Bueno, lo que hago es pasar todo el contenido de un txt a una variable. Hago un bucle y dentro un if y si se cumple quiero que esa línea me la borre.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
perl -p -i -e '$_="" if /@webs[$i]/' webs.txt
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Vamos, que habro el archivo webs.txt. Hace el buble (for) y dentro el if y si se cumple quiero que borre la web por la que iva: @webs[$i]

Pero, obtengo esto del interprete:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
Bareword found where operator expected at C:\Documents and Settings\later\E
scritorio\proyecto\limpia.pl line 23, near "'$_="" if /@webs[$i]/' webs"
        (Missing operator before webs?)
syntax error at C:\Documents and Settings\later\Escritorio\proyecto\limpia.
pl line 23, near "perl -p "
Execution of C:\Documents and Settings\later\Escritorio\proyecto\limpia.pl
aborted due to compilation errors.
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Publicidad

Notapor creating021 » 2008-03-09 10:44 @489

¿Cómo se supone que perl adivine el valor de @webs si no lo definies, y el de $i?

Hacer eso es más fácil con File::Tie
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor later » 2008-03-09 12:06 @546

Si que las tengo definidas, solo que no os he puesto el código, solo la función de borrado. Y gracias pero no me interesa utilizar otro módulo.
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Notapor explorer » 2008-03-09 15:35 @691

El error dice que no entiende lo que has escrito. Quiere decir que has mezclado un script Perl de línea de comandos con un programa Perl normal.
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

Notapor creating021 » 2008-03-09 15:36 @692

:| Bueno, en
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$_="" if /@webs[$i]/
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Suponiendo que estás dentro de un while y un for...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$_ =~ /$webs[$i]//;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


O de pronto ésta mejor:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open FL, "archivo" or die "Error con entrada: $!\n";
open TQ, "+>salida" or die "Error con salida: $!\n";
while ( <FL> ) {
    foreach my $i ( @webs ) {
        if ( $_ =~ /$i/ ){
            # eliminamos la línea, en este caso
            # me la salto.
            next;
        }
    }
    print TQ $_;
}
close TQ;
close FL;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

De pronto con grep se puede hacer algo mejor... pero lo anterior debe de funcionar :lol:

La cosa es que no podes escribir y leer el mismo archivo (por sectores) así como así... tenes que reescribirlo todo (por eso nombro Tie::File).
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Básico

¿Quién está conectado?

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

cron