• Publicidad

Duda con bucles

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

Duda con bucles

Notapor guaos » 2011-05-11 09:54 @454

Hola, buenas. Soy nuevo en Perl y poco a poco voy haciendo cosillas, pero aquí os pongo un par de dudas.

$busqueda=~ m/<b>(.*)<\/b><\/font><\/a><span class="mstrucos"><\/span> /;

En $busqueda tengo guardado un fichero de texto línea a línea. Contiene el código HTML del resultado de una búsqueda.

Con esta primera línea, guardo el nombre del primer cliente en $1, pero en $2, no me guarda la segunda coincidencia. ¿¿¿ Cómo podría coger las demás coincidencias ???

while ($busqueda =~ m/\s*<b>(.*)<\/b><\/font><\/a><span class="mstrucos"><\/span>\s* /g)

De esta manera consigo obtener las coincidencias. Pero me interesaría sacar algunos campos más de la búsqueda y que fueran todos dentro de un for() o un while().

Un saludo y gracias.
guaos
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2010-03-27 23:32 @022

Publicidad

Re: Duda con bucles

Notapor explorer » 2011-05-11 10:32 @480

Bienvenido, guaos, después de un año :D

Dentro del bucle while() que muestras, $1 contendrá lo capturado por el primer par de paréntesis. Y en la siguiente vuelta, lo mismo, para la siguiente coincidencia.

Si pones más paréntesis, más paréntesis de captura en el patrón de la exp. reg., las capturas se guardarán en $2, $3, etc.

Si pudieras poner un ejemplo corto de lo que quieres extraer, sería sencillo darte una solución.
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: Duda con bucles

Notapor guaos » 2011-05-11 16:31 @730

Gracias por la respuesta. Aquí te pongo un poco, digamos.
$busqueda=~ m/<b>\s*(.*)\s*<\/b><\/a><\/font>\n\s*<font face="Arial, Helvetica, sans-serif" size="2">/;
Aquí obtengo, digamos, el cliente.
$busqueda=~ m/<b>(.*)<\/b><\/font><\/a><span class="mstrucos"><\/span> /;
Aquí obtengo la dirección.

Todo esto es cogido de una búsqueda. Entre cada dato hay código HTML, con sus saltos de línea y demás.

Ahora eso lo meto en un while(), pero no consigo sacar los datos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($busqueda =~ m/\s*<b>\s*(.*)\s*<\/b><\/a><\/font>\s*\n\s*<font face="Arial, Helvetica, sans-serif" size="2">\s* .|\n .*<b>(.*)<\/b><\/font><\/a><span class="mstrucos"><\/span>\s* /g) {
  2.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


De esta manera no me funciona; entra en el bucle pero no me muestra los datos. Creo que con esto: .|\n estoy indicándole código HTML y los espacios, con lo que yo creo que estaría bien.

Un saludo y gracias.
guaos
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2010-03-27 23:32 @022

Re: Duda con bucles

Notapor explorer » 2011-05-11 17:57 @789

Si dices que hay más de un registro en el código HTML, lo ideal es identificar los separadores o código HTML que separa los registros.

Luego, el procedimiento es leer toda la página, mientras seamos capaces de encontrar ese registro. Y dentro de cada registro, aplicamos otra expresión regular para extraer los campos.

Me parece que lo has complicado un poco...

Intenta primero, capturar todo el código HTML que contenga todos los registros.
Lo guardas a una variable.
Luego haces un bucle while() en esa variable, por cada registro, extrayendo la información.

Sin ver el código HTML original, es difícil dar más pistas.
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 32 invitados