• Publicidad

Identificar tags de cierre en .html

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

Notapor polako » 2008-04-20 23:20 @014

Hola, debo respetar la indentación tal como viene, no es a mi criterio, esa solución no aplica en este momento. En resumen mi problema sigue estando en reconocer los espacios en blanco, si los hubiere, antes del tag de cierre.

saludos :)
polako
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2008-04-19 14:15 @635

Publicidad

Notapor explorer » 2008-04-21 04:46 @240

O sea, el tema es coger los posibles espacios en blanco delante de un marca de cierre, y simplemente quitarle los retornos de carro.

Pues nada, una segunda exp. regular.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use warnings;

if( open(INFILE,"kk.html") ) {

    $file_aux = "";
    while ($linea = <INFILE>) {
        $file_aux .= $linea;   # Leemos todas las líneas y las metemos en una variable
    }
    close (INFILE);

    print "$file_aux";  # Fichero original

    $file_aux =~ s/(\s*)(<\/)/(' ' x length($1)). $2/simoge;

    print "$file_aux";  # Fichero con espacios formateados

    $file_aux =~ s/(<\/.+?>)\n*/$1\n/simog;

    print "$file_aux";  # Y ahora, formateo de las marcas finales
}
else {
    print "No hay archivo de entrada\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

La salida es:
Código: Seleccionar todo
<title> Titulo de mi web lasdkfjalksdj
             </TITLE>
        <h1><p> este parrafo </p></h1>
<title> Titulo de mi web lasdkfjalksdj                              </TITLE>
        <h1><p> este parrafo </p></h1>
<title> Titulo de mi web lasdkfjalksdj                              </TITLE>
        <h1><p> este parrafo </p>
</h1>

Es una solución poco ortodoxa... pero al menos sale el ejemplo.
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 kidd » 2008-04-21 08:58 @415

Ummm, yo estoy logrando el resultado de salida que quieres con:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open my $INFILE, '<', "kk.html" or die $!;
my @lines = <$INFILE>;
close $INFILE;

for my $line( @lines ){
    chomp $line;
    $line =~ s/(\<\/.*?\>)/$1\n/;
    print $line, "\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor polako » 2008-04-21 14:33 @647

No coindice con la salida, </TITLE> sí debe estar en la misma línea, y está debajo. Es como puse en los ejemplos.

Saludos, les agradezco el aporte a todos :)
polako
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2008-04-19 14:15 @635

Notapor explorer » 2008-04-21 14:49 @659

En mi salida sí que está en la misma línea...
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 polako » 2008-04-21 18:54 @829

Bueno, al final pude, pero hay diferencia si lo ejecuto en Linux (Fedora) o en Win XP. En la última me funciona, y en Linux, no.

Este es el código final:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@lineas = <>;
chomp @lineas;
$todo = join '',@lineas;
while($todo=~ /(.*?)(<\/\w+>)/g)
{      
        print "$1$2\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Gracias a todos :)
polako
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2008-04-19 14:15 @635

Notapor explorer » 2008-04-22 02:12 @133

Es posible que los finales de línea estén en formato msdos (crlf). Al hacer el chomp() estarás quitando el carácter de avance de línea, pero seguirá estando el de retorno de carro.

Prueba con esto: antes del chomp, pones la línea $/ = "\r\n";, para indicar que las líneas acaban de esa manera.

Lo mejor sería abrir el fichero con el indicador ':crlf' en el open().
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 polako » 2008-04-22 12:29 @562

Gracias por el dato, sí, es en archivo DOS, de momento no creo necesario modificarlo, porque están corriendo el script desde consola, escribiendo el archivo txt de entrada. Esos son los requerimientos.
saludos y muchas gracias
polako
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2008-04-19 14:15 @635

Anterior

Volver a Básico

¿Quién está conectado?

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

cron