Mar Feb 21, 2006 1:06 pm
|
 |
slopal
Perlero Nuevo

|
Registrado: 23 Nov 2005
Mensajes: 78
|
|
|
|
|
vaaaaaaaale esto es, luego lo paso a "array" (que eso ya me sale) y ya esta
MUCHISIMAS GRACIAS
PD: ahora tendré que mirar si tb falla en ficheros muy grandes, pero ya miraremos esto  |
|
|
|
Mar Feb 21, 2006 1:32 pm
|
 |
slopal
Perlero Nuevo

|
Registrado: 23 Nov 2005
Mensajes: 78
|
|
|
|
|
jejejeje pozi
se supone que tiene que funcionar en cualquier sistema
de hecho veo que ahora va muchiiiisimo más rapido (para como iba...) de hecho, hasta el tamaño maximo que habia probado con IE funciona!
con firefox no :S pero pongo los datos en el formulario y hago un send... y al cabo d un rato me sale una ventanita de "warning: unresponsive script" y si le doy a stop script me devuelve el resultado jeje un poco raro.. al menos veo que lo sigue haciendo, supongo que sera problema de config del mozilla (antes me pasaba lo del tiempo con el explorer.. me lo tendre que mirar esto) y tb probarlo en linuuuuux  |
|

Mar Feb 21, 2006 1:47 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4129
Ubicación: Valladolid, España
|
|
|
|
|
Eso del fallo del firefox... me suena a que la página que mandas al navegador... no termina... por eso se queda esperando...
Dos cosas...
1.- En cuanto arranca tu programa, pon: $|=1; para que toda salida hacia el navegador sea inmediata, sin buffers.
2.- Repasa el programa y comprueba que envías una página html completa (empieza y acaba en <html>...</html>).
Porque otra causa de que no termine de responder, aparte del hecho de tratar ficheros enormes, es que se meta en algún bucle infinito... |
|

Mar Feb 21, 2006 6:00 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Hola:
Me parece que pierdes muchos recursos pues abres el archivo, juntas el contenido, luego lo vuelves a dividir en un array. Bien, tu código lo podría optimizar de la siguiente manera:
| Código: |
#Abrimos el archivo
open my $CADENA, '<', 'archivo.txt' or die("No se pudo abrir fichero: $!");
#Tomamos la primera línea
my $cap = <$CADENA>;
#Filtramos y salvamos en un array el contenido del archivo
my @cadena = map { filter($_) } <$CADENA>;
close $CADENA;
#El tamaño del array
my $mida_cadena = @cadena;
#Función de filtrado
sub filter{
#Recibimos la entrada
my $entrada = shift;
#Eliminamos los espacios
$entrada =~ s/\s//g;
#Regresamos la entrada en mayúsculas
return uc($entrada);
} #sub filter
|
Hice la prueba con un archivo de 30 megas con cerca de 30,000 entradas y me hace todo el proceso en menos de 10 segundos, tengo un sistema Windows.
Saludos |
|

Mie Feb 22, 2006 9:34 am
|
 |
slopal
Perlero Nuevo

|
Registrado: 23 Nov 2005
Mensajes: 78
|
|
|
|
|
| explorer escribió: |
1.- En cuanto arranca tu programa, pon: $|=1; para que toda salida hacia el navegador sea inmediata, sin buffers.
|
esto lo he hecho y sigue igual
| explorer escribió: |
2.- Repasa el programa y comprueba que envías una página html completa (empieza y acaba en <html>...</html>).
Porque otra causa de que no termine de responder, aparte del hecho de tratar ficheros enormes, es que se meta en algún bucle infinito... |
Lo haré más a fondo, de hecho mientras va haciendo todo se va registrando en un archivo de log, perome dice que acaba (la penultima linea es escribir en el log) y en cambio parece que no llega a hacer el close
PD: despues de esto q os he dicho hace mas cosas mi programa eh! ya os ire contando  |
|

Mie Feb 22, 2006 9:38 am
|
 |
slopal
Perlero Nuevo

|
Registrado: 23 Nov 2005
Mensajes: 78
|
|
|
|
|
| kidd escribió: | Hola:
Me parece que pierdes muchos recursos pues abres el archivo, juntas el contenido, luego lo vuelves a dividir en un array. Bien, tu código lo podría optimizar de la siguiente manera:
Hice la prueba con un archivo de 30 megas con cerca de 30,000 entradas y me hace todo el proceso en menos de 10 segundos, tengo un sistema Windows.
Saludos |
Como he dicho arriba, a parte de esto hace más cosas el programa (que ya os iré poniendo) pero veía que en esta parte tardaba "demasiado"...
Gracias por tu solución! Pero falta una cosita, que creo que no me expliqué bien....
Necesito que cada caracter del fichero corresponda con UNA posicion del array -una vez fuera los espacios y tal!- (para que así, además, me de correcto el tamaño dl array) y con map creo que lo hace línea a línea, pq me pasaba parecido con la opción de explorer.
Ahora, si sabes como incluirlo por ahí en medio... yo encantada  |
|

Mie Feb 22, 2006 11:47 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4129
Ubicación: Valladolid, España
|
|
|
|
|
| slopal escribió: | | explorer escribió: |
1.- En cuanto arranca tu programa, pon: $|=1; para que toda salida hacia el navegador sea inmediata, sin buffers.
|
esto lo he hecho y sigue igual
| Déjalo puesto...
| slopal escribió: | Lo haré más a fondo, de hecho mientras va haciendo todo se va registrando en un archivo de log, perome dice que acaba (la penultima linea es escribir en el log) y en cambio parece que no llega a hacer el close
PD: despues de esto q os he dicho hace mas cosas mi programa eh! ya os ire contando  | Cuando termines de enviar toda la página web, haz un close STDOUT; |
|

Mie Feb 22, 2006 11:55 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4129
Ubicación: Valladolid, España
|
|
|
|
|
| slopal escribió: | | Necesito que cada caracter del fichero corresponda con UNA posicion del array -una vez fuera los espacios y tal!- (para que así, además, me de correcto el tamaño dl array) y con map creo que lo hace línea a línea, pq me pasaba parecido con la opción de explorer. | Pues a la solución que te dí antes, le agregas lo de @cadena = split //,$cadena; y ya está... ¿no? |
|
Mie Feb 22, 2006 12:00 pm
|
 |
slopal
Perlero Nuevo

|
Registrado: 23 Nov 2005
Mensajes: 78
|
|
|
|
|
sips con tu solución ya me funcionaba!
lo decía pq como decía que de la otra forma era más rápido, pues si había alguna manera de añadirle algo q tb fuera más rápido... Pues por tener más opciones y comparar.
Pero por ahora voy con la tuya jeje gracias  |
|
Mie Feb 22, 2006 12:37 pm
|
 |
slopal
Perlero Nuevo

|
Registrado: 23 Nov 2005
Mensajes: 78
|
|
|
|
|
| explorer escribió: |
Déjalo puesto...
Cuando termines de enviar toda la página web, haz un close STDOUT; |
pongo las 2 cosas y en mozilla sigue fallando... en IE vuelve sin quejarse (al menos.. xD)
pero weno ahora esto es "lo de menos" pq aun me queda revisar otra parte del codigo... |
|

Mie Feb 22, 2006 9:19 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Umm, no comprendo muy bien lo que quieres, pero bueno, aquí va una prueba que te regresa el número de líneas y el número de caracteres totales ya sin los espacios:
| Código: |
my $total_caracteres = 0;
open my $CADENA, '<', 'tomo3.txt' or die("No se pudo abrir fichero: $!");
my $cap = <$CADENA>;
my @cadena = map { filter($_) } <$CADENA>;
close $CADENA;
my $mida_cadena = @cadena;
#Vemos el resultado
print "Caracteres Totales: $total_caracteres\n";
print "Líneas Totales: $mida_cadena\n";
sub filter{
my $entrada = shift;
$entrada =~ s/\s//g;
#contar caracteres de la línea
$total_caracteres += length($entrada);
return uc($entrada);
} #sub filter
|
SALUDOS |
|
Mar Feb 28, 2006 9:55 am
|
 |
slopal
Perlero Nuevo

|
Registrado: 23 Nov 2005
Mensajes: 78
|
|
|
|
|
muchisimas gracias a los dos! me habéis ayudado mucho  |
|
Powered by phpBB © 2001, 2005 phpBB Group
|