Mar Jun 28, 2005 12:51 am
|
 |
nopi:)
Perlero Nuevo

|
Registrado: 28 Jun 2005
Mensajes: 1
|
|
| Necesito que me corrijan por favor |
|
|
Saludos a todos!!
Aunque ya entregué esto 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!!  |
|
|
|

Mie Jul 06, 2005 12:49 pm
|
 |
eiial
Perlero Nuevo

|
Registrado: 20 Nov 2003
Mensajes: 48
|
|
|
|
|
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 |
|

Mie Jul 06, 2005 12:52 pm
|
 |
eiial
Perlero Nuevo

|
Registrado: 20 Nov 2003
Mensajes: 48
|
|
|
|
|
| faa q bala no checkee que fuera negro en busqueda, pero bue' mas o menos esa es la idea |
|
Dom Jul 24, 2005 7:20 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
|
|
| Re: Necesito que me corrijan por favor |
|
|
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": |
|
Powered by phpBB © 2001, 2005 phpBB Group
|