• Publicidad

Seleccionar una columna de un fichero

Perl aplicado a la bioinformática

Seleccionar una columna de un fichero

Notapor burbuja » 2012-01-08 11:55 @538

¡Hola!

Tengo una pequeña duda:
Necesito extraer de un fichero que comienza con varios comentarios que quiero saltar, la 3ª columna. Me explico:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
###
#      Word   Obs    Freq    Exp
#
AAA    1      0.02   0.03    ...    (cada columna está separada de la siguiente por \t )
TTT    2      0.05   0.08
CCC    5      0.07   0.12    ..... Y así sucesivamente
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Quiero extraer, a partir de AAA y hasta el final, la columna de ceros y asignársela a un array, siendo cada número un elemento del mismo.

Mi idea es leer el fichero completo y hacer un @lineas=split("\n",$fichero), porque cada línea acaba con un salto de línea: con esto tendría ya un array de líneas.

Mi problema es ahora cómo tomar sólo la columna de ceros (0.02, 0.05, 0.07...) y asignársela a un array. Mi idea era hacer dos shift() a cada línea para retirar los 2 primeros elementos (AAA y 1, p. ej.), y poner $numero= shift @linea: con esto debería cogerme el tercer elemento de la línea (posición 2 en informática) y guardarlo en $numero, ¿¿no??

Mi código es algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($fichero=<FICHERO>) {
  2. @linea= split ("\n", $fichero);
  3. shift @linea;
  4. shift @linea;
  5. $numero= shift @linea;
  6. $todos_numeros.= "$numero".":";   ### concateno todos los nº separados por : para luego hacer
  7. @numeros= split (":", $todos_numeros)  #### así tendría un array en el que cada elemento sería un número de la columna Obs como necesito.
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El problema es que me sale todo en blanco, vacío... =S

¿Me pueden decir por qué, y cómo podría hacerlo bien con estas funciones (split, shift, push...)?

Muchas gracias, un saludo
burbuja
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-12-18 13:30 @604

Publicidad

Re: Seleccionar una columna de un fichero

Notapor explorer » 2012-01-08 12:12 @550

Bienvenido a los foros de Perl en español, burbuja.

Te has saltado un paso en el procedimiento...

Tienes las líneas almacenadas en @lineas. Cada elemento es una línea, es decir, una cadena de texto.

Entonces, debes convertir esa cadena de caracteres en elementos del array @linea (no @lineas), haciendo un split() usando como delimitador el carácter tabulador (o, de forma general, cualquier espacio en blanco).

Así ya podrás referirte a las columnas a partir de la tercera: $linea[3], $linea[4], etc.

En el código, mezclas la lectura de cada línea (en el while()), con lo que esa línea representa. Y no puedes partir una línea leída por los "\n", pues solo hay uno, y al final de la línea que acabas de leer.

Sería algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open my $archivo, "<fichero.txt" or die;
  2. while (my $linea = <$archivo>) {
  3.     next if $linea =~ /^#/;           # si es un comentario, saltamos a la siguiente línea
  4.  
  5.     chomp $linea;                     # quitamos el "\n" del final
  6.  
  7.     my @linea = split(" ", $linea);   # partimos la línea
  8.     shift @linea;                     # quitamos las dos primeras columnas
  9.     shift @linea;                     # (estas dos líneas se pueden resumir en: splice(@linea, 0, 2) )
  10.  
  11.     # ... aquí ya tenemos en @linea todas las columnas que nos interesan
  12.     # Ejemplo: sacar a pantalla solo el primer dato: print "$linea[0]\n";
  13. }
  14. close $archivo;
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: Seleccionar una columna de un fichero

Notapor burbuja » 2012-01-09 09:04 @419

Ok, ¡¡muchas gracias por la ayuda!! :D
burbuja
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-12-18 13:30 @604


Volver a Bioinformática

¿Quién está conectado?

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