Perl en Español

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

Leer fichero menos la primera linea
Ir a página Anterior  1, 2
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mar Feb 21, 2006 1:06 pm
slopal
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Nov 2005
Mensajes: 78
Responder citando

vaaaaaaaale esto es, luego lo paso a "array" (que eso ya me sale) y ya esta Smile

MUCHISIMAS GRACIAS Smile

PD: ahora tendré que mirar si tb falla en ficheros muy grandes, pero ya miraremos esto Wink
Mensaje Mar Feb 21, 2006 1:32 pm
slopal
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Nov 2005
Mensajes: 78
Responder citando

jejejeje pozi

se supone que tiene que funcionar en cualquier sistema Smile
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! Very Happy

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 Question 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 Razz
Mensaje Mar Feb 21, 2006 1:47 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4129
Ubicación: Valladolid, España
Responder citando

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...
Mensaje Mar Feb 21, 2006 6:00 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

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
Mensaje Mie Feb 22, 2006 9:34 am
slopal
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Nov 2005
Mensajes: 78
Responder citando

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 Sad

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 Smile
Mensaje Mie Feb 22, 2006 9:38 am
slopal
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Nov 2005
Mensajes: 78
Responder citando

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 Smile
Mensaje Mie Feb 22, 2006 11:47 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4129
Ubicación: Valladolid, España
Responder citando

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 Sad
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 Smile
Cuando termines de enviar toda la página web, haz un close STDOUT;
Mensaje Mie Feb 22, 2006 11:55 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4129
Ubicación: Valladolid, España
Responder citando

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?
Mensaje Mie Feb 22, 2006 12:00 pm
slopal
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Nov 2005
Mensajes: 78
Responder citando

sips Smile 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 Smile gracias Smile
Mensaje Mie Feb 22, 2006 12:37 pm
slopal
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Nov 2005
Mensajes: 78
Responder citando

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 Smile (al menos.. xD)

pero weno ahora esto es "lo de menos" pq aun me queda revisar otra parte del codigo...
Mensaje Mie Feb 22, 2006 9:19 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

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
Mensaje Mar Feb 28, 2006 9:55 am
slopal
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Nov 2005
Mensajes: 78
Responder citando

muchisimas gracias a los dos! me habéis ayudado mucho Smile
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Ir a página Anterior  1, 2
Página 2 de 2



Powered by phpBB © 2001, 2005 phpBB Group