• Publicidad

Consulta sobre split

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

Consulta sobre split

Notapor seguridadenmimail » 2011-09-01 19:12 @842

Los molesto porque quiero usar split() en un archivo que contiene información separara por comas.

Archivo.txt
Sintáxis: [ Descargar ] [ Ocultar ]
  1. pais,argentina,capital federal,prueba 
  2. pais2,argentina,buenos aires,prueba2 


Mi idea es guardar la información en diferentes array, digamos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
array1: pais
        pais2

array2: argentina
        argentina

array3: capital federal
        buenos aires

array4: prueba
        prueba2
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Para luego mostrar algo así mediante el uso de algún bucle (for/while/foreach).

print array1(valor1) array2(valor1) array3(valor1) arrray4(valor1)
print array1(valor2) array2(valor2) array3(valor2) arrray4(valor2)


Espero que se entienda. Vi que usando split() puedo separar pero me guarda todo en un solo array.

Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Publicidad

Re: Consulta sobre split

Notapor explorer » 2011-09-01 19:43 @863

Esta es la solución obvia:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $archivo = "pais,argentina,capital federal,prueba\npais2,argentina,buenos aires,prueba2";
  2.                    
  3. my(@array1, @array2, @array3, @array4);
  4.                    
  5. for my $linea ( split /\n/, $archivo) {
  6.                    
  7.     my @campos = split /[,]/, $linea;
  8.                    
  9.     push @array1, $campos[0];
  10.     push @array2, $campos[1];
  11.     push @array3, $campos[2];
  12.     push @array4, $campos[3];                                                                                                                
  13. }                  
  14.                    
  15. use Data::Dumper;
  16.                    
  17. print Dumper \@array1;
  18. print Dumper \@array2;
  19. print Dumper \@array3;
  20. print Dumper \@array4;
  21.                    
  22. __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y esta es la solución corta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl                  
  2. my $archivo = "pais,argentina,capital federal,prueba\npais2,argentina,buenos aires,prueba2";
  3.                                  
  4. my @cubo;                       # Aquí guardaremos la estructura bidimensional
  5.  
  6. for ( split /\n/, $archivo ) {
  7.     push @cubo, [ split /[,]/, $_ ];
  8. }
  9.  
  10. use Data::Dumper;
  11. print Dumper \@cubo;
  12.              
  13. for my $linea (@cubo) {
  14.     print join('-', @{$linea}), "\n";
  15. }
  16. __END__
  17. $VAR1 = [
  18.           [
  19.             'pais',
  20.             'argentina',
  21.             'capital federal',
  22.             'prueba'
  23.           ],
  24.           [
  25.             'pais2',
  26.             'argentina',
  27.             'buenos aires',
  28.             'prueba2'
  29.           ]
  30.         ];
  31. pais-argentina-capital federal-prueba
  32. pais2-argentina-buenos aires-prueba2
  33.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Construimos un cubo (mejor dicho, una matriz de dos dimensiones), en que las líneas de la primera dimensión son las distintas líneas del fichero. En cada una de ellas, hay un array que guarda los distintos valores.

Lo hacemos así, porque luego facilita la salida, con un simple join().

Para acceder al tercer elemento de la segunda línea, escribimos: print $cubo[1][2];.
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: Consulta sobre split

Notapor seguridadenmimail » 2011-09-01 20:26 @893

Gracias.
Como hago para que me imprima los valores seguidos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/bin/perl
  2. my(@array1, @array2, @array3, @array4);
  3. open  $ARCHIVO, '<', $ARGV[0] or die $!;
  4. @ARCHIVOS = <$ARCHIVO>;
  5. for $VALOR(@ARCHIVOS){
  6.    my @campos = split /\,/, $VALOR;
  7.     push @array1, $campos[0];
  8.     push @array2, $campos[1];
  9.     push @array3, $campos[2];
  10.     push @array4, $campos[3];
  11. }
  12. print "@array1 @array2 @array3 @array4\n";
  13.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


salida:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. pais pais2 argentina argentina capital federal buenos aires prueba 
  2. prueba2 


Yo quiero:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. pais argentina capital federal prueba 
  2. pais argentina buenos aires prueba2 
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Consulta sobre split

Notapor explorer » 2011-09-02 04:12 @216

Tu mismo lo escribiste en el primer mensaje... Fíjate bien...
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: Consulta sobre split

Notapor seguridadenmimail » 2011-09-02 06:56 @330

El problema es que no sé la cantidad de líneas, digamos que voy a tener array[x].

Por eso solicitaba ayuda.

Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Consulta sobre split

Notapor explorer » 2011-09-02 07:00 @333

Pues si no sabemos cuántas líneas son, se hace un bucle...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for my $i (0 .. $#array1) {
  2.     print "$array1[$i] $array2[$i] $array3[$i] $array4[$i] \n";
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y por eso, la solución del cubo (matriz), es más cómoda.
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: Consulta sobre split

Notapor seguridadenmimail » 2011-09-02 07:02 @334

¡Perfecto!
Muchas Gracias =)
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853


Volver a Básico

¿Quién está conectado?

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

cron