• Publicidad

Abrir archivo de texto y guardarlo en una variable escalar

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

Abrir archivo de texto y guardarlo en una variable escalar

Notapor ivanlog19 » 2009-09-23 18:48 @825

Hola,

lo que quiero hacer es abrir un archivo de texto (.txt) y guardarlo en una variable escalar.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (FILE, "texto.txt");
my $archivo;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Cómo hago para que quede todo el texto guardado en $archivo?
¿Tengo que recorrer línea por línea y concatenar todo?
¿O hay una forma más directa?

¡Gracias!
ivanlog19
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2009-09-18 15:24 @683
Ubicación: Montevideo - Uruguay

Publicidad

Re: Abrir archivo de texto y guardarlo en una variable escalar

Notapor netsoul » 2009-09-24 01:38 @110

Una manera (no probado), de los muchos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use File::Util;
my($f) = File::Util->new();
my($content) = $f->load_file('foo.txt');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información en File::Util.
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: Abrir archivo de texto y guardarlo en una variable escalar

Notapor explorer » 2009-09-24 03:33 @190

Pues, tradicionalmente, los dos métodos que más se usaban era la concatenación:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open FILE, '<fichero.txt';
my $archivo = join '', <FILE>;
close FILE;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y la modificación de la variable especial $/:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open FILE, '<fichero.txt';
undef $/;
my $archivo = <FILE>;
close FILE;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


que, de forma más abreviada, quedaba resumida en el modismo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $archivo = do { local $/; open FILE, 'fichero,txt'; <FILE> };
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Explicación:
  • Cambiamos el valor de la variable $/ ("separador de registros a la entrada"), a indefinido, con lo que activamos el modo slurp ("chupador"), pero solo lo hacemos de forma local, dentro de las llaves del do{}. Así no afectará al resto de procesos de lectura del resto del programa
  • Abrimos el fichero en modo lectura
  • Leemos todo el fichero, y por ser esa la última sentencia del bloque do{}, es lo que se devuelve como resultado.
  • El propio do{} se encargará de cerrar el fichero, por lo que no necesitamos poner el close()

Hoy en día se suele preferir usar el módulo File::Read o File::Slurp, de igual forma que el File::Util que te comentó Netsoul. Cada uno tiene sus propias capacidades. Por ejemplo, File::Read es capaz de leer ficheros en modo root, File::Slurp es capaz de hacer la conversión de los finales de línea de Windows a Unix, y File::Util es capaz de bloquear el acceso al fichero para impedir su modificación mientras lo lee.

Yo, generalmente, para el día a día, uso el do{} anterior :)
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: Abrir archivo de texto y guardarlo en una variable escalar

Notapor ivanlog19 » 2009-09-24 10:44 @489

¡Excelente!
Muchas gracias a ambos.

Creo que cuando me dispuse a aprender Perl, hacerme un usuario en este foro fue una de las cosas más inteligentes que hice.
ivanlog19
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2009-09-18 15:24 @683
Ubicación: Montevideo - Uruguay


Volver a Básico

¿Quién está conectado?

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