• 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.

Re: Leer fichero menos la primera linea

Notapor explorer » 2006-02-20 17:56 @789

Esto no lo he probado, pero debería funcionar...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $cadena = join( '', map { s/\s//g; uc } <CADENA>);
  2. print "Longitud de la cadena ", length( $cadena ), "\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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

Publicidad

Notapor slopal » 2006-02-21 09:48 @450

Con esa forma me sale una longitud inmensaaaaa, de la otra manera se acerca más ¡je,je...! ¡Voy a probar cosas a ver!

¿Alguna otra idea, alguien? ¿Cómo elimino las posiciones en blanco sin que las siga contando en el tamaño? :S

Por ejemplo con esta entrada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>cuatrocuatro cuatro 4
a


t
cg
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

El resultado de
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print join( ",", @cadena );
  2.  
  3. $mida_cadena = $#cadena - $[ + 1;
  4.  
  5. print "<br>";
  6. print $mida_cadena;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
A,,,T,CG
5
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Notapor slopal » 2006-02-21 12:20 @556

Por cierto, si no encontramos la solución no hay problema, os pondré la que ya tenía... A ver si la podemos "optimizar" ya que con ficheros ¿grandes? se me queda como colgado (el explorador dice que no responde)... :S
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: Leer fichero menos la primera línea

Notapor explorer » 2006-02-21 13:44 @614

El resultado es correcto según el código que pones: hay 5 líneas (excluyendo antes la primera línea).

Pero esto no es lo que me has dicho antes, que querías saber la longitud de la cadena. En el ejemplo que mandas, creo que la salida debería ser 4, pues sólo hay 4 bases.

Esto es lo que me sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use warnings;
  4. use strict;
  5.  
  6. open (my $fichero, '<', $ARGV[0]) or die "No puedo abrir $ARGV[0]: $!\n";
  7.  
  8. ## Leemos la primera línea
  9. my $linea1 = <$fichero>;
  10.  
  11. ## Indefinimos la variable que indica el separador de registros de entrada
  12. undef $/;
  13.  
  14. ## con lo que en la siguiente lectura, leemos todo el fichero de golpe
  15. my $cadena = <$fichero>;
  16.  
  17. ## Filtrado de la cadena
  18. $cadena =~ s/\s//g;
  19. $cadena =  uc($cadena);
  20.  
  21. ## Salida
  22. print "$cadena - ", length($cadena), "\n";
  23.  
  24. close $fichero;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
El resultado de cuatro.pl cuatro.txt es: ATCG - 4.

¿Es eso lo que tiene que salir?

Con un ejemplo terminaremos entendiendo lo que necesitas :)
Última edición por explorer el 2006-02-22 12:51 @577, editado 1 vez en total
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 linea

Notapor explorer » 2006-02-21 13:46 @615

slopal escribiste:Por cierto, si no encontramos la solución no hay problema, os pondré la que ya tenía... a ver si la podemos "optimizar" ya que con ficheros ¿grandes? se me queda como colgado (el explorador dice que no responde)... :S

¿explorador? ¿No se te habrá ocurrido trabajar sobre Windows?
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-21 14:06 @629

Vaaaaaaaale, esto es, luego lo paso a "array" (que eso ya me sale) y ya está :)

MUCHÍSIMAS GRACIAS :)

P.D.: Ahora tendré que mirar si también falla en ficheros muy grandes, pero ya miraremos esto. :wink:
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Notapor slopal » 2006-02-21 14:32 @647

¡je,je,je,je! pozí

Se supone que tiene que funcionar en cualquier sistema :)

De hecho veo que ahora va muchiiiísimo más rápido (para como iba...) De hecho, ¡hasta el tamaño máximo que había probado con IE funciona! :D

Con Firefox no :S pero pongo los datos en el formulario y hago un send... y al cabo de un rato me sale una ventanita de "I" y si le doy a stop script me devuelve el resultado. :?: ¡je,je! Un poco raro... Al menos veo que lo sigue haciendo, supongo que será problema de configuración del Mozilla (antes me pasaba lo del tiempo con el explorer... (Me lo tendré que mirar esto) y también probarlo en Linuuuuux :P
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: Leer fichero menos la primera línea

Notapor explorer » 2006-02-21 14:47 @657

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...
  • En cuanto arranca tu programa, pon: $|=1; para que toda salida hacia el navegador sea inmediata, sin búfer
  • 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...
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 kidd » 2006-02-21 19:00 @833

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Abrimos el archivo
  2. open my $CADENA, '<', 'archivo.txt' or die("No se pudo abrir fichero: $!");
  3.  
  4.     #Tomamos la primera línea
  5.     my $cap = <$CADENA>;
  6.  
  7.     #Filtramos y salvamos en un array el contenido del archivo
  8.     my @cadena = map { filter($_) } <$CADENA>;
  9.  
  10. close $CADENA;
  11.  
  12.  
  13. #El tamaño del array
  14. my $mida_cadena = @cadena;
  15.  
  16.  
  17. #Función de filtrado
  18. sub filter{
  19.  
  20. #Recibimos la entrada
  21. my $entrada = shift;
  22.  
  23. #Eliminamos los espacios
  24. $entrada =~ s/\s//g;
  25.  
  26. #Regresamos la entrada en mayúsculas
  27. return uc($entrada);
  28.  
  29. } #sub filter
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

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
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-22 10:34 @481

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 :(

explorer escribiste:* 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, 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().

P.D.: Después de esto que os he dicho hace más cosas mi programa, ¡eh! Ya os iré contando :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados

cron