• Publicidad

Leer filas archivo

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

Leer filas archivo

Notapor dma1968 » 2011-01-18 03:49 @200

Hola,

Soy nuevo en esto del Perl y voy algo perdido.

He mirado por el foro pero no he visto la solución a mi problema. Bueno, he visto soluciones pero no me funcionan, supongo que algo no debo de hacer bien.

Tengo que leer un archivo con 20 líneas de números aleatorios, cada línea tiene 240 números.
Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1,5,34,23,345,...,0
2,3,4,55,6,1,...,23
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Cada línea la quiero pasar a un array @color_1, @color_2...

Creo que si me explicáis cómo hacer esto ya podré hacer lo siguiente que es quitar el último número de la serie y añadir uno nuevo desde otro array.

Todo esto por si os interesa es para crear unas gráficas.

Saludos y gracias.
dma1968
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-01-17 05:04 @253

Publicidad

Re: Leer filas archivo

Notapor explorer » 2011-01-18 05:57 @290

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

Para leer de un fichero de tipo texto, solo tienes que usar open() y el operador diamante (<>) para obtener cada línea. Usas un bucle while(), que seguirá leyendo líneas hasta el fin del fichero.

En cada línea, lo primero que haces es quitarle el carácter de fin de línea, con el comando chomp().

Luego, en cada línea, como los valores están unidos con una coma, los divides con split(). Eso crea una lista de valores, que los metes directamente en el array.

Para quitar el último número del array, usas pop(). Sacas el siguiente número del array que contiene los nuevos números con shift(). Y se lo metes al array de números anterior con push().

Finalmente, unes todos los números con comas con la ayuda de join(), y lo imprimes a pantalla o a otro fichero o lo procesas en el gráfico. Y cierras los ficheros abiertos con close().

Más información en perldoc perlop en tu propio ordenador. Y para obtener información de cada función: perldoc -f funció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

Re: Leer filas archivo

Notapor dma1968 » 2011-01-19 05:50 @284

Gracias.

Ya he visto el problema que tenía.
Para hacer pruebas creé yo mismo el archivo de texto y creo que por eso no tenía el salto de línea.

Ahora lo que no consigo hacer (pensaba que sería más fácil) es pasar cada línea a un array diferente).
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open LEER,"<radar_total.txt"|| die"No se pudo crear archivo: $!";
  2. my $linea;
  3. while($linea=<LEER>){
  4.         chomp($linea);
  5.         @colors=split (/,/,$linea);
  6. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

¿Cómo paso cada línea del array @colors a @color_0, @color_1...

Saludos y gracias de nuevo.
dma1968
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-01-17 05:04 @253

Re: Leer filas archivo

Notapor explorer » 2011-01-19 12:41 @570

No es cómodo ni aconsejable tener una variable por cada línea del fichero... Además de hacer al programa innecesariamente largo, si un día cambiaran las condiciones (número de líneas del fichero de entrada), deberíamos cambiar unas cuantas líneas del programa.

Lo mejor, en tu caso, es crear una estructura bidimensional. La primera dimensión serán las líneas del fichero, y cada columna, los componentes de cada línea.

(no probado)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @colors;
  2.  
  3. open RADAR, "<radar_total.txt" or die "ERROR: No puedo leer el archivo: $!\n";
  4.  
  5. while (<RADAR>) {
  6.     chomp;
  7.  
  8.     my @componentes = split /,/;
  9.  
  10.     push @colors, [ @componentes ];    # creamos un array anónimo con los @componentes, y lo agregamos a @colors
  11. }
  12.  
  13. close RADAR;
  14.  
  15. use Data::Dumper;
  16. print Dumper \@colors;   # vemos la estructura creada
  17.  
  18. print $colors[2][6],   "\n"; # accedemos al séptimo componente de la tercera línea
  19. print $colors[-1][-1], "\n"; # accedemos al último componente de la última línea
Coloreado en 0.001 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

Re: Leer filas archivo

Notapor dma1968 » 2011-01-25 10:02 @459

Gracias.

Con tu ayuda he conseguido que funcione.
dma1968
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-01-17 05:04 @253


Volver a Básico

¿Quién está conectado?

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