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

Leer fichero menos la primera línea

Notapor slopal » 2006-02-20 13:57 @623

Otra preguntilla...

Para leer la primera línea de un fichero en una variable... haría $línea=<FICHERO>;

¿Y para leer todo el fichero menos la primera línea? ¿Hay alguna manera directa sin tener que hacer un bucle línea a línea? Necesito algo más rápido...

¡¡Gracias!!
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Publicidad

Re: Leer fichero menos la primera línea

Notapor explorer » 2006-02-20 14:10 @632

Hay varias formas de hacerlo.

Se me ocurre esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @fichero = <FICHERO>;
  2. shift @fichero;
  3. my $variable = join '',@fichero;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2006-02-20 14:32 @647, 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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-02-20 14:25 @643

:O ¡¡gracias!!

Y... ¿que se guarde en una $variable? Es que necesito aplicarle expresiones regulares tipo "~ tr/[a-z]/[A-Z]/;" y me da error... :(

(¿o alguna manera de aplicar esta expresión en una lista? :$)

Por cierto el shift(), ¿qué hace exactamente, quita la primera línea?

Yo tengo (ya para poner orden):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $cap = <CADENA>;  #cojo la primera línea del fichero porque me interesa
  2.  
  3. # ahora quiero el resto en un array sin espacios y todo en mayúsculas, dime si hago bien
  4.  
  5. my @cadena = <CADENA>;
  6. shift @cadena;       # ¡si hago esto me dice que esta vacía!
  7. my $cadena = join '',@cadena;
  8. $cadena=~ tr/[a-z]/[A-Z]/;    # aquí la pongo "bonita"
  9. $cadena =~ s/\s//g;
  10. @cadena = split //, $cadena;  # aquí lo vuelvo a poner en un array
  11.  
  12. # ahora quiero consultar el tamaño del array
  13. $mida_cadena = $#cadena - $[ + 1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y creo que sin el shift() funciona... pero me da la sensación que se podría optimizar todo este lío de ahora lo hago cadena, luego variable y luego cadena otra vez... :) ¡Muchas gracias, en serio!
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-20 15:24 @683

Pues debería funcionar también así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @cadena = <CADENA>;
  2. my $cap = shift @cadena;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Debería funcionar si el fichero es un fichero de texto con terminaciones de línea normales.

En cuanto a lo de hacerla bonita... no queda más remedio que hacer un bucle...
Sintáxis: [ Descargar ] [ Ocultar ]
  1. @cadena = map { s/\s//g; uc($_) } @cadena; 

Lo que hacemos aquí, para cada elemento ($_) de @cadena, es mapearlo en otro valor. Lo que hacemos es primero quitarle los espacios en blanco (s///) y luego lo pasamos a mayúsculas (uc()). El resultado queda en la misma @cadena.

Si te sale que @cadena está vacía, algo debe de pasar en el momento de la lectura del fichero. ¿No habrás redefinido la variable $/ ?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-02-20 15:53 @703

Ahora me va bien :)

Por cierto, una última cosa :P ¿cómo "saco" el tamaño de la cadena? Porque la forma que tenía de acceder anterior:

$mida_cadena = $#cadena - $[ + 1;

Ya no me sirve :(
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-20 16:56 @747

¿Y por qué no te vale?

$#cadena+1 debería seguir devolviéndote el número de elementos del array @cadena...

Es más... sería más cómodo hacer esto:

$mida_cadena = @cadena;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-02-20 17:08 @755

Ahora que he estado haciendo pruebas... eso sí que calculaba bien el tamaño...

Lo que pasa es que al hacer

@cadena = map { s/\s//g; uc($_) } @cadena;

Y luego calculo el tamaño... es como si además de los caracteres, contará los saltos de línea que habían... o algo así :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-20 17:12 @758

Arreglado...
Código: Seleccionar todo
@cadena = map { chomp; s/\s//g; uc($_) } @cadena;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer fichero menos la primera línea

Notapor explorer » 2006-02-20 17:36 @775

¿Pero quieres la longitud de toda la cadena o del número de líneas leídas?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-02-20 17:43 @779

explorer escribiste:¿Pero quieres la longitud de toda la cadena o del número de líneas leídas?

Quiero el número de elementos de la cadena, una vez quitamos la primera línea del fichero (bueno, esto ya lo hace bien, claro) y una vez quitamos los espacios sobrantes (espacios, intros, etc...). ¡Ah! y lo del chomp() no me sirve :(

Gracias, ¡eh! :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron