• Publicidad

Leer fichero menos la primera línea

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

Notapor slopal » 2006-02-22 10:38 @484

kidd escribiste: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.
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 carácter del fichero corresponda con UNA posición del array -¡una vez fuera los espacios y tal!- (para que así, además, me dé correcto el tamaño del array) y con map{} creo que lo hace línea a línea, porque me pasaba parecido con la opción de explorer.

Ahora, si sabes cómo incluirlo por ahí en medio... yo encantada :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Publicidad

Re: Leer fichero menos la primera linea

Notapor explorer » 2006-02-22 12:47 @574

slopal escribiste:
explorer escribiste:* En cuanto arranca tu programa, pon: $|=1; para que toda salida hacia el navegador sea inmediata, sin búfer.
Esto lo he hecho y sigue igual :(
Déjalo puesto...

slopal escribiste:Lo haré más a fondo, de hecho mientras va haciendo todo se va registrando en un archivo de log, pero me dice que acaba (la penúltima línea es escribir en el log) y en cambio parece que no llega a hacer el close().

PD: después de esto que os he dicho hace más cosas mi programa ¡eh! Ya os iré contando :)
Cuando termines de enviar toda la página web, haz un close STDOUT;.
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

Re: Leer fichero menos la primera línea

Notapor explorer » 2006-02-22 12:55 @580

slopal escribiste:Necesito que cada carácter del fichero corresponda con UNA posición del array -¡una vez fuera los espacios y tal!- (para que así, además, me de correcto el tamaño del array) y con map creo que lo hace línea a línea, porque me pasaba parecido con la opción de explorer.
Pues a la solución que te di antes, le agregas lo de @cadena = split //,$cadena; y ya está... ¿no?
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 slopal » 2006-02-22 13:00 @583

sips :) ¡Con tu solución ya me funcionaba!

Lo decía porque como decía que de la otra forma era más rápido, pues si había alguna manera de añadirle algo que también fuera más rápido... Pues por tener más opciones y comparar.

Pero por ahora voy con la tuya, ¡je,je! :) Gracias :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Notapor slopal » 2006-02-22 13:37 @609

explorer escribiste:Déjalo puesto...

Cuando termines de enviar toda la página web, haz un close STDOUT;


Pongo las dos cosas y en Mozilla sigue fallando... en IE vuelve sin quejarse :) (al menos.. xD)

Pero, bueno, ahora esto es "lo de menos" porque aún me queda revisar otra parte del código...
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Notapor kidd » 2006-02-22 22:19 @971

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $total_caracteres = 0;
  2.  
  3. open my $CADENA, '<', 'tomo3.txt' or die("No se pudo abrir fichero: $!");
  4.  
  5. my $cap = <$CADENA>;
  6. my @cadena = map { filter($_) } <$CADENA>;
  7.  
  8. close $CADENA;
  9.  
  10. my $mida_cadena = @cadena;
  11.  
  12. #Vemos el resultado
  13. print "Caracteres Totales: $total_caracteres\n";
  14. print "Líneas Totales: $mida_cadena\n";
  15.  
  16. sub filter {
  17.  
  18.     my $entrada = shift;
  19.  
  20.     $entrada =~ s/\s//g;
  21.  
  22.     #contar caracteres de la línea
  23.     $total_caracteres += length($entrada);
  24.  
  25.     return uc($entrada);
  26.  
  27. }                                      #sub filter
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4



SALUDOS
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 slopal » 2006-02-28 10:55 @496

¡Muchísimas gracias a los dos! Me habéis ayudado mucho :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 7 invitados