Problema al sacar resultados con StringRegExp

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Problema al sacar resultados con StringRegExp

Mensaje por arkcrew »

Hola a todos,

En primer lugar decir que esta maldita función siempre me trae por el camino de la amargura y rara vez consigo hacer que un código me funcione de primeras cuando utilizo la función, deprimente jajajaja.

Bueno tengo este código html:

Código: Seleccionar todo

  <tr>
		   <td class="space" width="20"> </td>
           <td class="data_table_data" align="center">
             
                 18:e7:f4:51:10:a4
             
           </td>
           <td class="data_table_data" align="center">
            
              192.168.1.38
            
           </td>
           <td class="data_table_data" align="center">
            
              0:10:24:24
            
           </td>
           <td class="data_table_data" align="center">
            
              Gm15
            
           </td>
           <td class="data_table_data" align="center">
		    
		   </td>
		   <td class="space" width="20"> </td>
         </tr>
        
         <tr>
		   <td class="space" width="20"> </td>
           <td class="data_table_data" align="center">
             
                 00:22:f7:2a:5e:79
             
           </td>
           <td class="data_table_data" align="center">
            
              192.168.1.33
            
           </td>
           <td class="data_table_data" align="center">
            
              0:11:20:49
            
           </td>
           <td class="data_table_data" align="center">
            
              Alberto-PC
            
           </td>
           <td class="data_table_data" align="center">
		    
		   </td>
		   <td class="space" width="20"> </td>
         </tr>
De ahí la idea es leer la MAC la IP y el nombre del PC que están aqui <td class="data_table_data" align="center">

Hago esto:

Código: Seleccionar todo

#include <INet.au3>

$source = _INetGetSource("http://1234:[email protected]/webconfig/status/dhcp_table.html")
$leer = StringRegExp($source, '<td class="data_table_data" align="center">(.*?)</td>', 3)
For $a = 0 to UBound($source)-1
	MsgBox(0,"",$leer[$a])
next
Pero no me devuelve nada..

Echadme una mano porfa :D

Saludos!

PD: es mi router, que quiero controlar por el DCHP quien se conecta.
Avatar de Usuario
juantxo
Hacker del Foro
Mensajes: 78
Registrado: 02 Abr 2008, 13:36

Re: Problema al sacar resultados con StringRegExp

Mensaje por juantxo »

Me alegra un monton no ser el unico al que StringRegExp le trae por la calle de la amargura!!

Cada vez que tengo que hacer algo con ella... En fin.

Casualmente hoy me he estado pegando con algo parecido a lo que intentas hacer, y creo que deberias modificar la expresion por la siguiente:
StringRegExp($source, '(?s)<td class="data_table_data" align="center">(.*?)</td>', 3)

De esta forma le indicas que no tenga en cuenta los saltos de linea, que es lo que puede estar fallando.

Ya nos diras si era eso... :smt041
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Re: Problema al sacar resultados con StringRegExp

Mensaje por arkcrew »

Gracias por responder,

Pensé que quizás podían ser los saltos de línea, el caso es que aún poniéndolo para que los tenga en cuenta, tal cual indicas, pues sigue sin funcionar.. maldita sea, que depresión de función AJAJJAJAJAJA

Saludos!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Problema al sacar resultados con StringRegExp

Mensaje por Chefito »

Yo también tuve ese problema (salto de líneas y retornos de carro), y buscando buscando todo se encuentra.
Si no recuerdo mal sería así:

Código: Seleccionar todo

$leer = StringRegExp($source, '<td class="data_table_data" align="center">([\w|\W]*)</td>', 3)
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Re: Problema al sacar resultados con StringRegExp

Mensaje por arkcrew »

No furula -.-"

#include <INet.au3>

Código: Seleccionar todo

$source = _INetGetSource("http://1234:[email protected]/webconfig/status/dhcp_table.html")
$leer = StringRegExp($source, '<td class="data_table_data" align="center">([\w|\W]*)</td>', 3)
For $a = 0 To UBound($source) - 1
	MsgBox(0, "", $leer[$a])
Next
El código html se devuelve a la perfección, el problema está en la función StringRegExp..
Saludos!

EDITO:

Estoy atontado, fijaos en esto For $a = 0 To UBound($source) - 1, puse eso en vez de $leer.. ya va perfecto..
Saludos!
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Problema al sacar resultados con StringRegExp

Mensaje por jamaro »

Hola chic@s:

Sigo en este hilo, para no crear uno nuevo de StringRegExp, a ver si me echáis una mano.

Tengo unos textos en los que a veces está cada línea de datos en una línea, propiamente dicho:

Código: Seleccionar todo

~T|01.04.03.3|Eliminación de los maceteros metálicos en los balcones.|
~T|ANEXO.01|Ejecución de trasteros en cubierta.|
~M|02.05#\02.05.03|2\5\3\|1|\Partida alzada\1\\\\|
~M|02.05#\02.05.04|2\5\4\|2|\Cuartos ascensor\2\\\\|
~M|02.05#\02.05.05|2\5\5\|65|\Conducto principal\\\\\\   Horizonal\1\25\\\\\1\28\\\\   Vertical\4\3\\\|
~M|02.05#\02.05.06|2\5\6\|12|\Bajantes\12\\\\|
pero en otras ocasiones está con saltos de línea:

Código: Seleccionar todo

\YCM030\\13.460
\YCR010a\\140.000
\YCR010\\140.000
\YCR030\\280.000
\|
~M|YC\YCB010a|13\1\1\|560.000|
   \\1\280.00\\\
   \\1\280.00\\\
|
~M|YC\YCB010b|13\1\2\|123.300|
   \\10\12.33\\\
|
~M|YC\YCB010|13\1\3\|31.580|
   \Huecos en fachada\1\31.58\\\
   \\10\12.33\\\
|
Pretendo obtener, con StringRegExp cada una de las líneas que empiezan por ~M, con el patrón "(~M.*)" pero cuando el texto está como en el segundo ejemplo, no consigo obtenerlo. He probado con (?s) pero tampoco me funciona... ¿alguna idea?

Después ya utilizo StringSplit para separar los datos que hay entre "|", y en su caso, también lo usaré para los datos separados por "\", pero de momento, como digo, necesito sacar cada una de las líneas con ~M

Saludos
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Problema al sacar resultados con StringRegExp

Mensaje por Ximorro »

Por defecto el comodín punto (cualquier carácter) NO casa con retornos de línea, para que lo haga hay que activar el flag (?s) al principio de la ER.
Por ejemplo "(?s)(~M[^~]*)" tomará el que empiece por ~M y tomará todo (retornos de carro incluido) hasta el siguiente ~ (exclusive)
Por supuesto los retornos de carro formarán parte del resultado, básicamente ?s lo que hace es tomarlos como caracteres normales.

Si pones "(?s)(~M.*)" fíjate que al no finalizar las cadenas en el retorno en cuanto te encuentre un ~M te tomará desde ahí hasta el final pues .* casará con absolutamente todo, por eso tienes que decirle dónde acaba la subcadena que quieres, como hago arriba. Si dentro de la subcadena a buscar puede haber ~, pues... buena suerte ;-)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Problema al sacar resultados con StringRegExp

Mensaje por jamaro »

Muchas gracias Ximorro (Mr. Expresiones Regulares).

Con esta explicación y sustituyendo retornos como comenta también Basicos, por otro medio, espero obtener los datos como deseo.

Gracias por vuestra ayuda.
Responder