• Publicidad

De fichero de texto a array bidimensional

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

De fichero de texto a array bidimensional

Notapor UffPerl » 2008-01-19 05:16 @261

¡¡Hola!! Mi intención es pasar un fichero de texto (.txt) a array bidimensional para poder modificar cada uno de los caracteres que componen el fichero original, en lenguaje Perl.

¿Alguien me puede ayudar? :roll:

¡¡¡Muchas gracias!!! :P
UffPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-01-19 05:09 @256

Publicidad

Notapor elnico » 2008-01-19 06:15 @302

Hola.
Te recomiendo algo como:

post-11296.html

Saludos.
elnico
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2007-09-09 14:44 @656

Notapor UffPerl » 2008-01-19 08:41 @403

Hola "elnico",

Gracias por tu referencia, pero estos códigos más o menos, ya los había probado; y lo que hacen es dividirme el texto en fila por línea.

Y a mi lo que me interesa es un "array bidimensional" donde en cada fila haya una línea y que en ésta cada posición sea un carácter de línea inicial.

Por ejemplo: texto del interior del fichero de texto

Código: Seleccionar todo
     Pepe me dijo: ¿hola que tal?
     y yo le conteste: "bien gracias"


Código: Seleccionar todo
@array [ [] [] ] =>
      c1 c2 c3 c4 c5 c6 c7 ...
   f1 P  e  p  e     m  e  ...
   f2 y     y  o     l  e  ...
UffPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-01-19 05:09 @256

Notapor explorer » 2008-01-19 10:14 @468

Bienvenido a los foros de Perl en Español, UffPerl.

Con split //, $linea podrás separar la línea entre caracteres. Y para guardarlo en una estructura bidimensional, lo más fácil es igual que cuando lo hacemos en lenguaje C: un array de array.

Por cada línea del fichero, lo transformamos en una lista de valores. Esa lista la transformamos en un array anónimo, que introducimos, como un solo elemento, como una fila más de la estructura bidimensional. En C ocupa unas cuantas líneas hacer todo esto (incluyendo la reserva de memoria). En Perl se hace en 3 líneas:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use Data::Dumper;

open FICHERO, "<texto.txt" or die "ERROR: No encuentro el fichero texto.txt\n";
@lineas = <FICHERO>        or die "ERROR: No puedo leer el fichero\n";
close FICHERO              or die "ERROR: No puedo cerrar el fichero\n";

foreach ( @lineas ) {
  push @rray, [ split // ];
}

print Dumper(\@rray);

 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Naturalmente, hay otras nueve formas distintas de conseguir hacer esto mismo...
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 UffPerl » 2008-01-19 11:58 @540

¡¡¡Gracias Explorer!!!

Tu solución es muy buena y válida para lo que yo necesito.

Pero si no es pedir demasiado... ¿cómo puedo hacer que la impresión sea en horizontal y no en vertical?

Gracias :D
UffPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-01-19 05:09 @256

Notapor explorer » 2008-01-19 12:45 @573

Pues de la misma manera que se haría en casi cualquier otro lenguaje heredado del C: con bucles:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for ( $j = 0; $j < @rray; $j++ ) {
    for ( $i = 0; $i < @{$rray[$j]}; $i++ ) {
        print $rray[$j][$i];
    }
}

foreach $linea ( @rray ) {
    for ( $i = 0; $i < @$linea; $i++ ) {
        print $linea->[$i];
    }
}

foreach $linea ( @rray ) {
    for $i ( 0 .. $#{$linea} ) {
        print $linea->[$i];
    }
}

foreach $linea ( @rray ) {
    foreach $caracter ( @$linea ) {
        print $caracter;
    }
}

foreach $caracter ( map { @$_ } @rray ) {
    print $caracter;
}

print for map {@$_} @rray;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Vamos, hay muchas formas de hacerlo. Pero la forma básica es casi la misma que en cualquier otro lenguaje de programación.
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 UffPerl » 2008-01-20 07:52 @369

¡¡¡Muchas Gracias!!!

La verdad es que nunca había utilizado array bidimensionales, y supongo que tenía un bloqueo inicial...

¡¡Gracias de verdad!!
UffPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-01-19 05:09 @256

Notapor zangre » 2010-06-18 04:07 @213

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting


print Dumper(\@rray);

 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿Qué hace exactamente? :O
Última edición por zangre el 2010-06-18 04:25 @226, editado 1 vez en total
Avatar de Usuario
zangre
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2010-06-16 06:35 @316
Ubicación: Barcelona

Re: De fichero de texto a array bidimensional

Notapor explorer » 2010-06-18 04:19 @222

Un volcado del contenido del @rray. Puedes probarlo sin miedo...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@array = (
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ],
);

use Data::Dumper;
print Dumper \@array;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Data::Dumper (y el resto de su familia) es una mejores herramientas para saber qué demonios hay dentro de una variable.
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: De fichero de texto a array bidimensional

Notapor zangre » 2010-06-18 04:27 @227

Vamos que imprime la matriz, ¿no?
Genial, ya lo veo.

Gracias. ;)
Avatar de Usuario
zangre
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2010-06-16 06:35 @316
Ubicación: Barcelona


Volver a Básico

¿Quién está conectado?

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

cron