Ayuda con macro

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

ringmaker
Posts: 7
Joined: 05 May 2017, 15:49

Ayuda con macro

05 May 2017, 15:57

Hola, estoy intentando hacer un script que me permita filtrar informacion de una base de datos que copio de una aplicacion en Java atraves de un escritorio remoto.

Mi proposito es que con el codigo mediante una serie de variables que yo eligo entre toda la info de dicha web, me cree un panel con solo la informacion que necesitio visualizar y digamos desheche toda la que no me es relevante.

Esto que quiero hacer ya lo he conseguido anteriormente con otra aplicacion, pero dicha aplicacion digamos que la info de cada variable estaba en la misma linea de codigo de dicha pagina
info para variables2.JPG
info para variables2.JPG (11.18 KiB) Viewed 3792 times
Me explico, una opcion que copiaba era por ejemplo el apellido o nombre de una persona, pero dicha info estaba a continuacion de la variable y no "debajo" como sale ahora
info para variables.JPG
info para variables.JPG (12.88 KiB) Viewed 3792 times
El caso es que ahora no me recopila la info pq en esta aplicacion como adjunto en los ejemplos la info la gran mayoria no sale a continuacion sino debajo.

Una vez que tengo la info en las variables la vuelco en un panel como este
panel.JPG
panel.JPG (10.99 KiB) Viewed 3792 times
para asi en una vision mas reducida tener todos los datos que tengo que visualizar sin tener que buscarlos por toda la web.

No se si me he explicado bien.

PD: No puedo poner mas info por politica de proteccion de datos.
Last edited by ringmaker on 07 May 2017, 04:27, edited 1 time in total.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda con macro

05 May 2017, 19:23

Hola, no te entiendo.
Intenta explicarte lo mejor que puedas, pon imágenes y algún script que tengas echo de momento, comentando las partes que no funcionan.
ringmaker
Posts: 7
Joined: 05 May 2017, 15:49

Re: Ayuda con macro

06 May 2017, 16:23

Hola, aquí te pongo ejemplo de las variables y de parte del panel de la macro.


CopiaOrder:
;;;;;;;;;;*******************
Order := copia()

RegExMatch(Order, "TaskErrorDescription(.+)", SubPat)
ERROR = %SubPat1%
RegExMatch(Order, "Tarea en Error (.+)", SubPat)
TERROR = %SubPat1%
RegExMatch(Order, "SFID (.+)", SubPat)
SFID = %SubPat1%
RegExMatch(Order, "Nombre de cliente (.+)", SubPat)
NOMBRECLIENTE = %SubPat1%


InfoPanel:
Gui 2: Destroy
Gui 2: +AlwaysOnTop
Gui 2: font, s08+, Verdana
Gui 2: Add, Text, , Orderid:
Gui 2: Add, Text, , Error:
Gui 2: Add, Text, , Terror:
Gui 2: Add, Edit, vOrderid ym, %ORDERID%
Gui 2: Add, Edit, vError, %ERROR%
Gui 2: Add, Edit, vTerror, %TERROR%

La info se extrae de una aplicación dentro de un centro remoto y el problema es que la info de las variables en vez de estar en la misma línea está en la línea siguiente.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda con macro

06 May 2017, 18:39

a ver si nos entendemos...
Quieres extraer ciertos datos de un texto. Este texto (información) lo obtienes de una aplicación WEB. Hasta ahí entiendo, ahora:
El problema es que la info de la variable no está en la misma línea porque la aplicación está en Java y la info la pone dentro de un recuadro.
¿Como es eso de que no está en la misma línea?, ¿que línea?, ¿que variable?...
En tu último comentario no me has explicado nada... ese script que has puesto no me dice nada y no le veo ninguna relación con lo que me estás contando.
Cuando hago control+a para copiar toda la página y que pille las variables para pegarlas en la macro no las pilla porque salen como en la fila siguiente y no en la de la variable.

Cuando te dije que me pongas un script de ejemplo, la idea era que pongas una parte de la información original donde esté a su vez la parte que quiere recuperar, lo que ocurre cuando intentas copiar la información, lo que esperas que ocurra cuando copias la información, y finalmente que parte de toda la información quieres recuperar; por lo menos en pseudocódigo comentado...

Te recomiendo que vuelvas a escribir tu pregunta (edita tu primer mensaje) comentando paso por paso lo que quieres hacer y como.
Tal vez sea únicamente yo el que no te entienda, tal vez no, asi que para no hacerte perder tiempo a ti ni a mí intentando adivinar durante 1h que quieres hacer, formula bien tu pregunta y nos ahorras trabajo y tiempo a todos.
ringmaker
Posts: 7
Joined: 05 May 2017, 15:49

Re: Ayuda con macro

07 May 2017, 04:28

Ya he vuelto a editar el primer post a ver si asi me explico mejor, disculpa.
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda con macro

07 May 2017, 09:57

PD: No puedo poner mas info por politica de proteccion de datos.
No es necesario que me pongas la información correcta, ya que es solo un ejemplo, podrías haber inventado la información, la idea era saber como estaba organizada y que partes querías recuperar... :facepalm:
Una vez que tengo la info en las variables la vuelco en un panel como este
Ese 'panel' es un poco confuso, solo veo que acepte números, vamos, que ahí mucha información no entra. :think:

Ahora si te he entendido mejor.
Tu antes tenías algo como:

Code: Select all

Variable Valor
y ahora tienes:

Code: Select all

Variable
Valor
Eso es correcto?, Te dejo un script (fíjate que hay una línea comentada):

Code: Select all

Gui, New, -DPIScale -Resize, AutoHotkey Window
Gui, Add, Edit, x8 y24 w761 h161 HWNDhEdit1, ######`n239483`nFabricante`nN/A`n$$$$$$`n99992898
Gui, Add, Edit, x8 y216 w761 h161 HWNDhEdit2
Gui, Add, Text, x8 y0 w761 h20, Información sin procesar:
Gui, Add, Text, x8 y192 w761 h20, Información procesada:
Gui, Add, Button, x441 y384 w208 h23 gDo, Procesar información
Gui, Add, Button, x670 y383 w101 h23 gGuiClose, Cerrar
Gui, Show, w781 h415
Return


GuiClose:
ExitApp
return


Do:
ControlGetText, Text,, ahk_id %hEdit1%

; ##########################################################################################
Text2 := StrSplit(Text, "`n", "`r")
Loop, Parse, % Text, `n, `r
{
	Tmp := Trim(A_LoopField)
	
	; Fabricante -- para 'filtrar' más información, solo copia este if {...} y pegalo abajo cambiando 'Fabricante' por la otra 'Variable'.
	if (Tmp = "Fabricante")
	{
		NewText .= "`n" . Tmp . ": " . Text2[A_Index + 1]
	}
}
; ##########################################################################################

ControlSetText,, % Trim(NewText), ahk_id %hEdit2%
NewText := Text := Text2 := ""
return
Se podría optimizar mucho más, lo hice rápido, pero si la información no es muy extensa te debería servir.
ringmaker
Posts: 7
Joined: 05 May 2017, 15:49

Re: Ayuda con macro

07 May 2017, 12:04

No es eso exactamente lo que busco(al menos el panel que me has expuesto aqui), necesito que directamente al abrir el panel ya me salgan cada variable con su valor de manera inmediata como lo hacia con el otro panel. Es por tema de rapidez pq necesito filtrar dicha info al instante y son unas 40 variables con su informacion correspondiente.

Con esta opcion que indico debajo de codigo no se puede añadir algo para que la busqueda la haga en la linea siguiente en vez de acontinuacion?

RegExMatch(Order, "TaskErrorDescription(.+)", SubPat)
ERROR = %SubPat1%

"Order" digamos que es como tiene el inicio del nombre la app para que busque en el copiado dicha parte que indico...
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda con macro

07 May 2017, 13:50

Code: Select all

Order := "Línea 1`nLínea 2`nTaskErrorDescription`n0x10 0x20`nNombre de cliente`n0x40 0x50`nEnd."

RegExMatch(Order, "i)TaskErrorDescription(\n.+)", SubPat) 
MsgBox % "_" . Trim(SubPat1, "`n") . "_"

RegExMatch(Order, "i)Nombre de cliente(\n.+) *", SubPat) 
MsgBox % "_" . Trim(SubPat1, "`n") . "_"
o

Code: Select all

Order := "Línea 1`nLínea 2`nTaskErrorDescription`n0x10 0x20`nNombre de cliente`n0x40 0x50`nEnd."

RegExMatch(Order, "ims)TaskErrorDescription(.+?\n)", SubPat) 
MsgBox % "_" . Trim(SubPat1, "`n") . "_"

RegExMatch(Order, "ims)Nombre de cliente(.+?\n)", SubPat) 
MsgBox % "_" . Trim(SubPat1, "`n") . "_"
???. Se podría mejorar, pero no me llevo bien con las expresiones regulares.
Edito*
He encontrado esta herramienta online, parece muy útil, aquí esta el el manual.
ringmaker
Posts: 7
Joined: 05 May 2017, 15:49

Re: Ayuda con macro

07 May 2017, 15:00

Te has liado lol

TaskError es una variable diferente del programa y nombre de cliente otra.

No entiendo para que esto Order := "TaskErrorDescription`n0x10 0x20`nNombre de cliente`n0x40 0x50"
ringmaker
Posts: 7
Joined: 05 May 2017, 15:49

Re: Ayuda con macro

07 May 2017, 15:01

Este seria el código:

Code: Select all

ResetVar:
Order = 0
RECORTES = 0
ERROR = 0
TERROR = 0
SFID = 0
NOMBRECLIENTE = 0
CIF = 0
CIUDAD = 0
PROVINCIA = 0
CODIGOPOSTAL = 0
CALLE = 0
NUMERO = 0
PISO = 0
LETRA = 0
NOTASDIRECCION = 0
GESCAL = 0
TCALLE = 0
TBLOQUE = 0
NBLOQUE = 0
BIS = 0
ESCALERA = 0
MANO = 0
MANO2 = 0
GESCAL37 = 0
NPORTAL = 0
PORTAL = 0
VFH = 0
MODALIDAD = 0
ONT = 0
CAPACIDAD= 0
IUA = 0
FIJO = 0
CONTACTO = 0
CONTACTO2 = 0
return

CopiaOrder:
;;;;;;;;;;*******************
Order := copia()

RegExMatch(Order, "TaskErrorDescription(.+)", SubPat)  
ERROR := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Tarea en Error (.+)", SubPat)			
TERROR := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "SFID (.+)", SubPat)		
SFID := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Nombre de cliente (.+)", SubPat)		
NOMBRECLIENTE := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "CIF (.+)", SubPat)		
CIF := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Ciudad (.+)", SubPat)		
CIUDAD := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Provincia (.+)", SubPat)		
PROVINCIA := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Código Postal (.+)", SubPat)		
CODIGOPOSTAL := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Calle (.+)", SubPat)		
CALLE := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Número/Portal (.+)", SubPat)		
NUMERO := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Piso (.+)", SubPat)		
PISO := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Letra (.+)", SubPat)		
LETRA := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Notas de Dirección (.+)", SubPat)		
NOTASDIRECCION := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Código GESCAL (.+)", SubPat)		
GESCAL := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Tipo de la vía (.+)", SubPat)		
TCALLE := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Tipo de Bloque (.+)", SubPat)		
TBLOQUE := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Numero de Bloque (.+)", SubPat)		
NBLOQUE := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Bis Duplicado (.+)", SubPat)		
BIS := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Escalera (.+)", SubPat)		
ESCALERA := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Mano (.+)", SubPat)		
MANO := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Mano2 (.+)", SubPat)		
MANO2 := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "GESCAL37 (.+)", SubPat)		
GESCAL37 := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Numero Portal Puerta (.+)", SubPat)		
NPORTAL := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Portal Puerta(.+)", SubPat)		
PORTAL := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Login de datos (.+)", SubPat)		
VFH := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Modalidad (.+)", SubPat)		
MODALIDAD := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Password de ONT (.+)", SubPat)				
ONT := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Codigo IUA (.+)", SubPat)  
IUA := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Capacidad (.+)", SubPat)  
CAPACIDAD := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "TelephoneNumber (.+)", SubPat)  
FIJO := StrSplit(SubPat1, "`n")[2]
RegExMatch(Order, "Teléfono (.+)", SubPat)  
CONTACTO = %SubPat1%
RegExMatch(Order, "Teléfono secundario (.+)", SubPat)  
CONTACTO2 := StrSplit(SubPat1, "`n")[2]
return

InfoPanel:
Gui 2: Destroy
Gui 2: +AlwaysOnTop
Gui 2: font, s08+, Verdana
Gui 2: Add, Text, , Orderid:
Gui 2: Add, Text, , Error:
Gui 2: Add, Text, , Terror:
Gui 2: Add, Text, , Sfid:
Gui 2: Add, Text, , Nombrecliente:
Gui 2: Add, Text, , Cif:
Gui 2: Add, Text, , Ciudad:
Gui 2: Add, Text, , Provincia:
Gui 2: Add, Text, , Codigopostal:
Gui 2: Add, Text, , Calle:
Gui 2: Add, Text, , Numero:
Gui 2: Add, Text, , Piso:
Gui 2: Add, Text, , Letra:
Gui 2: Add, Text, , Notasdireccion:
Gui 2: Add, Text, , Gescal:
Gui 2: Add, Text, , Tcalle:
Gui 2: Add, Text, , Tbloque:
Gui 2: Add, Text, , Nbloque:
Gui 2: Add, Text, , Bis:
Gui 2: Add, Text, , Escalera:
Gui 2: Add, Text, , Mano:
Gui 2: Add, Text, , Mano2:
Gui 2: Add, Text, , Gescal37:
Gui 2: Add, Text, , Portal:
Gui 2: Add, Text, , Vf:
Gui 2: Add, Text, , Modalidad:
Gui 2: Add, Text, , Ont:
Gui 2: Add, Text, , Capacidad:
Gui 2: Add, Text, , Iua:
Gui 2: Add, Text, , Fijo:
Gui 2: Add, Text, , Contacto:
Gui 2: Add, Text, , Contacto2:
Gui 2: Add, Edit, vOrderid ym, %ORDERID%
Gui 2: Add, Edit, vError, %ERROR%
Gui 2: Add, Edit, vTerror, %TERROR%
Gui 2: Add, Edit, vSfid, %SFID%
Gui 2: Add, Edit, vNombrecliente, %NOMBRECLIENTE%
Gui 2: Add, Edit, vCif, %CIF%
Gui 2: Add, Edit, vPCiudad, %CIUDAD%
Gui 2: Add, Edit, vPProvincia, %PROVINCIA%
Gui 2: Add, Edit, vPCodigopostal, %CODIGOPOSTAL%
Gui 2: Add, Edit, vPCalle, %CALLE%
Gui 2: Add, Edit, vPNumero, %NUMERO%
Gui 2: Add, Edit, vPPiso, %PISO%
Gui 2: Add, Edit, vPLetra, %LETRA%
Gui 2: Add, Edit, vPNotasdireccion, %NOTASDIRECCION%
Gui 2: Add, Edit, vPGescal, %GESCAL%
Gui 2: Add, Edit, vPTcalle, %TCALLE%
Gui 2: Add, Edit, vPTbloque, %TBLOQUE%
Gui 2: Add, Edit, vPNbloque, %NBLOQUE%
Gui 2: Add, Edit, vPBis, %BIS%
Gui 2: Add, Edit, vPEscalera, %ESCALERA%
Gui 2: Add, Edit, vPMano, %MANO%
Gui 2: Add, Edit, vPMano2, %MANO2%
Gui 2: Add, Edit, vPGescal37, %GESCAL37%
Gui 2: Add, Edit, vPPORTAL, %PORTAL%
Gui 2: Add, Edit, vPVf, %VFH%
Gui 2: Add, Edit, vPModalidad, %MODALIDAD%
Gui 2: Add, Edit, vPOnt, %ONT%
Gui 2: Add, Edit, vPCapacidad, %CAPACIDAD%
Gui 2: Add, Edit, vPIua, %IUA%
Gui 2: Add, Edit, vPFijo, %FIJO%
Gui 2: Add, Edit, vPContacto, %CONTACTO%
Gui 2: Add, Edit, vPContacto2, %CONTACTO2%
Gui 2: Show, , InfoPanel
return
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda con macro

07 May 2017, 15:27

TaskError es una variable diferente del programa y nombre de cliente otra.
Fue solo un ejemplo de la expresión regular. Deberías definir 'Variable', siento que estamos aplicando conceptos diferentes. :roll:
No entiendo para que esto Order := "TaskErrorDescription`n0x10 0x20`nNombre de cliente`n0x40 0x50"
Se supone que la Variable 'Order' contiene la información de la que deseas filtrar ciertos datos, ¿no?.
Es lo que utilizas en Order := copia(), te lo puse como ejemplo, si no, como quieres que pruebe si funciona o no... :eh:

En el código que me has pasado, estas utilizando esto:

Code: Select all

RegExMatch(Order, "TaskErrorDescription(.+)", SubPat) 
ERROR := StrSplit(SubPat1, "`n")[2]
Cuando yo te he puesto esto otro:

Code: Select all

RegExMatch(Order, "ims)TaskErrorDescription(.+?\n)", SubPat) 
ERROR := Trim(SubPat1, "`n")
Que se supone, corrige tu problema de que los datos están en una nueva línea.

Por cierto, tu código y GUI se vería mucho mejor si utilizaras objetos y un control ListView.
ringmaker
Posts: 7
Joined: 05 May 2017, 15:49

Re: Ayuda con macro

07 May 2017, 15:44

Eso será el siguiente paso que se autoajuste en tamaño o separarlos en dos columnas
User avatar
Flipeador
Posts: 1204
Joined: 15 Nov 2014, 21:31
Location: Argentina
Contact:

Re: Ayuda con macro

07 May 2017, 15:52

Algo así:

Code: Select all

Items := {Order: 0, RECORTES: 0, ERROR: 0, TERROR: 0, SFID: 0, NOMBRECLIENTE: 0, CIF: 0, CIUDAD: 0, PROVINCIA: 0, CODIGOPOSTAL: 0, CALLE: 0, NUMERO: 0, PISO: 0, LETRA: 0, NOTASDIRECCION: 0, GESCAL: 0, TCALLE: 0, TBLOQUE: 0, NBLOQUE: 0, BIS: 0, ESCALERA: 0, MANO: 0, MANO2: 0, GESCAL37: 0, NPORTAL: 0, PORTAL: 0, VFH: 0, MODALIDAD: 0, ONT: 0, CAPACIDAD: 0, IUA: 0, FIJO: 0, CONTACTO: 0, CONTACTO2: 0}


Gui, New, HWNDhMain -DPIScale, AutoHotkey Window
Gui, Add, ListView, x2 y2 w500 h300 HWNDhLV, Item|Valor
	try DllCall("UxTheme.dll\SetWindowTheme", "Ptr", hLV, "Str", "Explorer", "Ptr", 0)
Gui, Add, Button, x2 y304 w100 h25 gCargar, Cargar

Gui, Show, w504 h332


Mostrar:
LV_Delete()
for Item, Value in Items
	LV_Add(, Item, Value)
LV_ModifyCol(1, "AutoHdr")
return


Cargar:
Order := copia()

RegExMatch(Order, "ims)Nombre de cliente\s+(.+?\n)", SubPat) 
Items.ERROR := Trim(SubPat1, "`n")

Gosub Mostrar
return


copia() {
	return "************** `n ************** `n Nombre de cliente `n X-XXX-XXX `n *************** `n *************"
}

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 18 guests