Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Necesito que me corrijan por favor

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Mar Jun 28, 2005 12:51 am
nopi:)
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Jun 2005
Mensajes: 1
Necesito que me corrijan por favor Responder citando

Saludos a todos!!
Aunque ya entregué esto Sad pero aún me quedo con la curiosidad
de hacerlo funcionar (respóndamne cuando puedan, ya lo entregué y no hay apuro)

Mi programa debe leer un archivo html y entregar una salida
archivo_cargado.spam si encuentra "tinta invisible" (texto con igual color que el fondo) y cambiar el color del texto por cualquier otro que se vea en el archivo de salida(o sea debe entregar un archivo de salida igual que el de entrada, pero con el texto cambiado de color si lo encuentra igual que el fondo).

aqui va mi código(todo comentado):
Código:

#!/usr/local/bin/perl
print "Nombre del Archivo:";     #abre archivo
$archivo = <STDIN>;
open(FHANDLE,$archivo) || die "$!";
$out = "${archivo}.spam";  #nombre arch salida=nombre entrada.spam
open(OUT,>$out)|| die "$!";
while (<FHANDLE>){       #primero: recorre el archivo y busca color de fondo
        if ($_ =/bgcolor=["]*(.*\s)["]*/$1/i){  #asigno "color" a $1
                $fondo=$1;   #$fondo es el color de fondo
                next;
        }else{           #si no existe bgcolor, por defecto blanco
                $fondo="white";
                next;
        }
}
while (<FHANDLE>){  #recorre el archivo
      if (($fondo=="white")||($fondo=="#FFFFFF")){#segundo:analiza fondo blanco,
                if (($_==/\scolor=["]*(white)["]*/i)||          #letras blancas
                    ($_==/\scolor=["]*(#FFFFFF)["]*/i) ||  #y pone letras negras
                    ($_==/text=["]*(white)["]*/i) ||
                    ($_==/text=["]#FFFFFF["]*/i)){
                        $_=~s/\scolor=["]*(white)["]*/black/i;   #para cada caso
                        $_=~s/\scolor=["]*(#FFFFFF)["]*/black/i;
                        $_=~s/text=["]*(white)["]*/black/i; #color cadena o hex
                        $_=~s/text=["]#FFFFFF["]*/black/i;  #para text= o color=
                        next;
                 }
                 next;
       }
        if (($fondo!="white")||($fondo!="#FFFFFF")){#tercero:analiza otros casos
                if (($_==/\scolor=["]*(.*)["]*/$2/i) ||     #pone letras blancas
                    ($_==/text=["]*(.*)["]*/$2/i)){#asigna color encontrado a $2
                    if ($fondo==$2){        #si color fondo == color encontrado
                        $_=~s/\scolor=["]*(#FFFFFF)["]*/white/i; #cambia letras
                        $_=~s/text=["]*(white)["]*/white/i;      #a blanco
                        next;
                    }
                 next;
                }
         next;
        }
        print OUT "$_\n"; #agrega la fila al archivo de salida
}
close(FHANDLE); #cierra los archivos
close(OUT);

por su atención, gracias
y muchos saludos!! Smile
Mensaje Mie Jul 06, 2005 12:49 pm
eiial
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2003
Mensajes: 48
Responder citando

Yo lo haria distino:

Código:
my $archivo = chop(<STDIN>);

open(LECTURA,$archivo) or die $!;
read(LECTURA,$_,-s $archivo); # cargamos todo el archivo
close(LECTURA);

# cargamos todo el archivo, ahora analizamos suponiendo que es con palabra o que es hexadecimal, no rgb

if (/<body[^>]*bgcolor\s*=\s*(?:"\s*([^"]*)\s*"|'\s*([^']*)\s*'|\s*([^ >]*))/ims) { # buscamos la etiqueta body y el color de fondo

my $busqueda = $1=~/white|#ffffff/i?'white|#ffffff':'black|#000000';  # complementamos las opciones

my %opuesto =('white'=>'black','black'=>'white','#ffffff'=>'#000000','#000000'=>'#ffffff'); # establecemos los opuestos

if (s/(text:|color\s*=\s*["']?|color:)\s*(${busqueda})/$1.$opuesto{lc($2)}/geims) { # buscamos las opciones y reemplazamos por opuesto

open(ESCRITURA,'>',$archivo.'.spam') or die $!;
print ESCRITURA;
close(ESCRITURA);

} else {
  print 'No hay colores "transparentes"';
}

} else {
     print 'No existe color de fondo'; # el color predeterminado varia según la configuracion del navegador
}


más o menos deberia funcionar

Saludos
Mensaje Mie Jul 06, 2005 12:52 pm
eiial
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2003
Mensajes: 48
Responder citando

faa q bala no checkee que fuera negro en busqueda, pero bue' mas o menos esa es la idea
Mensaje Dom Jul 24, 2005 7:20 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4127
Ubicación: Valladolid, España
Re: Necesito que me corrijan por favor Responder citando

Hay otro problema más "gordo". El script no te vale si la definición de los colores está en otra parte, por ejemplo en una hoja de estilos css.

Actualización: Tampoco funcionará si los colores están definidos como "palabras":
Cita:
<font color="red">
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group