• Publicidad

Extraer columnas de un archivo txt usando un array

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Extraer columnas de un archivo txt usando un array

Notapor abraham03 » 2017-12-18 21:27 @935

Hola, tengo unos datos en un archivo txt, los datos están separados por columnas (tab), algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
#Var    columnA columnB columnC columnD …..columnZ
x1      1       3       7       0.9     …1
x2      5       3       13      7       …2
x3      0.1     0.8     7       1       …3
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

y estoy tratando de hacer un script para extraer una o varias columnas, según se requiera (las columnas de extracción nunca son las mismas, es decir no puedo usar un número fijo para extraerlas), solo que no he podido hacer que extraiga las columnas que deseo.

Asumiendo que quiero extraer las columnas A y C, al final quedaría algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
#Var    columnA columnC
x1      1       7
x2      5       13
x3      0.1     7
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my @wanted_fields = qw/columnA columnC/;
  6.  
  7. open DATA, '<', "columns.txt" or die "cant open file\n";
  8.  
  9. my @datain = <DATA>;
  10. close DATA;
  11.  
  12. my ( @unit_name, $names, @lines, @conteo, @column_match, @names_match );
  13.  
  14. foreach (@datain) {
  15.     if    ( $_ =~ m/^$/g )      { next; }
  16.     elsif ( $_ =~ m/#Genera/g ) { $names = $_; }
  17.     else                        { push @lines, $_ }
  18. }
  19.  
  20. @unit_name = split( /\t/, $names );
  21. shift @unit_name;
  22. my $count = 0;
  23.  
  24. foreach (@wanted_fields) {
  25.     my $unit_wanted = $_;
  26.     chomp $unit_wanted;
  27.     foreach (@unit_name) {
  28.         if ( $_ =~ m/$unit_wanted/g ) {
  29.             $count++;
  30.             push( @conteo, $count );
  31.         }
  32.     }
  33. }
  34.  
  35. foreach (@lines) {
  36.     chomp;
  37.     my @columnas = split( /\t/, $_ );          # ¡¡¡ aquí es donde quería usar un loop con @conteo y extraer cada columna !!!
  38.     print "$columnas[0]\n";
  39. }
  40.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Gracias.
abraham03
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2016-08-05 15:52 @703

Publicidad

Re: Extraer columnas de un archivo txt usando un array

Notapor explorer » 2017-12-19 00:20 @055

Es un tema que ya hemos tratado alguna vez. Incluso existen unos cuantos módulos en CPAN.

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: Extraer columnas de un archivo txt usando un array

Notapor abraham03 » 2017-12-19 13:35 @608

Genial. Lo voy a revisar. ¡¡ Gracias por responder !!
abraham03
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2016-08-05 15:52 @703


Volver a Intermedio

¿Quién está conectado?

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