• Publicidad

Problemas para extraer datos entre cadenas

¿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.

Problemas para extraer datos entre cadenas

Notapor poeaod » 2011-05-28 04:20 @222

¡Buenas a todos!

Hace poco encontré el libro de Larry Wall ¡y no puedo dejar Perl!

Actualmente estoy aplicando este lenguaje en todo lo que puedo.

... Y lamentablemente me terminé bloqueando en algo.

La situación:
Estoy intentando realizar un script que lo que hace es barrer un archivo HTML donde figuran todos los usuarios que se loguearon a una aplicación, entre otros datos, y extraer todos los nombres de estos.

La parte del archivo donde saco datos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. ...title="Ver perfil de perezjuan1">perezjuan1</a></td>.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
.


El script (la función que maneja esto):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $inputfile=$ARGV[0];
  2.  
  3. sub perfil() {
  4.     open( INPUTFILE, $inputfile ) || die "No existe el archivo " . $inputfile;
  5.     while (<INPUTFILE>) {
  6.         while (/perfil de (.*)">/g) {
  7.             print "$&\n";
  8.         }
  9.     }
  10.     close INPUTFILE;
  11.  
  12.     exit(0);
  13. }
  14.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El problema:
Sucede que la salida que veo es la siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
.
perfil de perezjuan1">
.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


La idea es que la salida (en consola) sea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
perezjuan1
rodriguezramon2
etc...
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Entiendo por qué está mal, pero no logro encontrar una solución, ya que no veo cómo extraer los datos (nombres de usuarios) definiendolo entre "cadenas" (por ejemplo: imprimir los datos que se encuentran entre "title="Ver perfil de">" y "</a></td>").

Si alguien me pudiera ayudar a solucionar, esto lo agradecería, ya que no estoy extrayendo los datos limpios y no me sirve

¡¡¡Gracias!!!
poeaod
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-05-28 03:48 @200

Publicidad

Re: Problemas para extraer datos entre cadenas

Notapor explorer » 2011-05-28 05:34 @274

Bienvenido a los foros de Perl, poeaod.

La variable espeecial $& contiene todo lo que haya sido encontrado en la última expresión regular. Eso incluye todo el texto que acompaña a los paréntesis de captura.

Debes cambiar $& por $1, ya que es esta última variable la que contiene lo que se ha capturado por la primera pareja de paréntesis de la exp. reg.

Y... por si acaso... también cambiaría .* por .*? .
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas para extraer datos entre cadenas

Notapor poeaod » 2011-05-28 23:22 @015

¡¡¡¡Gracias, explorer!!!! Doy el tema por SOLUCIONADO.
La respuesta fue impecable, gracias. Estoy en deuda.
poeaod
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-05-28 03:48 @200


Volver a Intermedio

¿Quién está conectado?

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

cron