• Publicidad

Recorrer línea carácter por carácter

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

Recorrer línea carácter por carácter

Notapor Skull118 » 2013-05-13 14:23 @641

Buenas tardes, maestros de Perl, deseo realizar lo siguiente:

Tengo un archivo TXT con líneas parecidas a estas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
0c0!1!0!0!0!0!0!0!0!1!0!1!0!0!0!0!0!
0!0!0!0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!
0!0!305!0!0!0!0!0!24!0!317!0!1!24!18!75!5!14!
0!0!82!0!0!0!0!0!10!0!83!0!2!10!6!60!7!14!
0!0!0!0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!
0!0!0!0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!
0!0!0!0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!
0!0!0!0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!
0!0!5!0!0!0!0!0!0!0!7!0!1!0!2!0!2!2!
0!0!0!0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Deseo únicamente extraer el valor número 11, que se encuentra entre el carácter "!" número 10 y el carácter "!" número 11.

Básicamente lo que necesito hacer es, una función que me permita recorrer la línea, carácter por carácter, y que cuando encuentre el carácter deseado me indique que lo encontró y siga buscando hasta el final de la fila.

Gracias de antemano.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Publicidad

Re: Recorrer línea carácter por carácter

Notapor explorer » 2013-05-13 14:44 @656

Esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.16;
  3. use File::Slurp;
  4.  
  5. my $archivo = read_file('code_34622.txt', chomp => 1);    # leemos el archivo
  6.  
  7. $archivo =~ s/\s+//g;                                     # quitamos los finales de línea
  8.  
  9. my $valor = (split /!/, $archivo)[10];                    # accedemos al valor undécimo
  10.  
  11. say "[$valor]";
  12.  
  13. __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Hay más formas, claro... pero viendo que se usa el carácter '!' como delimitador, pues es mejor usarlo.
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: Recorrer línea carácter por carácter

Notapor Skull118 » 2013-05-13 15:05 @670

Compañero explorer, creo que expresé mal lo que necesitaba. Vuelvo a intentar explicarme, espero esta vez sea certero. Tengo un archivo XXXX.txt con las líneas como estás, y necesito extraer lo que puse como comentarios, gracias de antemano.


Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
0!0!1!0!0!0!0!0!0!0!1!0!1!0!0!0!0!0!           ##Aquí extraería el 1
0!0!0!0!0!0!0!0!0!0!15!0!1!0!0!0!0!0!          ##Aquí extraería el 15
0!0!305!0!0!0!0!0!24!0!317!0!1!24!18!75!5!14!  ##Aquí extraería el 317
0!0!82!0!0!0!0!0!10!0!83!0!2!10!6!60!7!14!     ##Aquí extraería el 83
310!0!2!0!24!0!323!0!0!0!3!0!1!0!0!0!115!128!  ##Aquí extraería el 3
0!0!285!0!0!0!0!0!19!0!293!0!2!19!17!89!5!14!  ##Aquí extraería el 293
0!0!72!0!0!0!0!0!4!0!74!0!2!4!4!100!7!12!      ##Aquí extraería el 74
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Traté de implementarlo con split() pero solo me regresa 0. Gracias de antemano.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Re: Recorrer línea carácter por carácter

Notapor MARKO » 2013-05-13 16:13 @717

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(ARCHIVO,"texto.txt");
  2. my @vector = <ARCHIVO>;
  3. close ARCHIVO;
  4. foreach(@vector){
  5.         my @linea = split(/!/,$_);
  6.         print "$linea[10]\n";
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Éxitos
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Re: Recorrer línea carácter por carácter

Notapor explorer » 2013-05-13 16:55 @746

Te devolvía un 0, porque ese es el valor que está en la posición pedida :)

En ese caso, de procesarlo por líneas, entonces se puede resolver como te ha dicho MARKO, o incluso desde la línea de comandos:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. $ perl -F'!' -a -n -l -e 'print $F[10]' code_34622.txt 
  2. 15 
  3. 317 
  4. 83 
  5. 293 
  6. 74 
Partimos la línea (-a) por el delimitador '!' (-F'!'). Las líneas no son impresas (-n), sino que somos nosotros los que imprimimos el campo undécimo ($F[10]), con un carácter de fin de línea (-l).
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: Recorrer línea carácter por carácter

Notapor Skull118 » 2013-05-13 17:16 @761

Señores: un éxito la solución brindada; todo mi respeto y agradecimiento a su persona, muchas gracias. Tengo una nueva duda: ¿cómo ingreso estos valores a un array o matriz? Gracias de antemano.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Re: Recorrer línea carácter por carácter

Notapor explorer » 2013-05-13 17:54 @787

Puedes usar push().
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: Recorrer línea carácter por carácter

Notapor Skull118 » 2013-05-14 10:17 @470

Muchas gracias, explorer, solo deseo saber dos cosas más, ¿cómo saco los valores diferentes de un arreglo?, ¿y cómo saco el máximo valor de un array. Gracias de antemano.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Re: Recorrer línea carácter por carácter

Notapor explorer » 2013-05-14 13:22 @598

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use List::Util      qw(max);
use List::MoreUtils qw(uniq);

print "Máximo: ", max(@array),  "\n";
print "Únicos: ", uniq(@array), "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
o con un solo módulo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use List::AllUtils qw(max uniq);

print "Máximo: ", max(@array),  "\n";
print "Únicos: ", uniq(@array), "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Más información en List::Util, List::MoreUtils y List::AllUtils.
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


Volver a Básico

¿Quién está conectado?

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