Hacia tiempo que no escribía por aquí, todavía no manejo bien las expresiones regulares y creo que se puede mejorar lo que hice, tengo el texto de abajo quiero extraer los bloques 1 (SNR) 2 (Velocidad) y 3 (Atenuación) para lo que uso el código comentado, pero creo que se puede optimizar en un par de ellos o en uno solo pero que no acierto a conseguir.
Code: Select all
^1::
Global vResCAD
vResCAD := {}
vSincroCSC := clipboard
vSincroCSCCorto := ""
wCRLF := "`r`n"
; Busca sincronismo
If (BuscaCadenaAlt(vSincroCSC, "SNR(.+)" . wCRLF . "(.+)" . wCRLF . "(.+)") <> "-1")
vSincroCSCCorto .= vResCAD[0] . wCRLF . wCRLF
If (BuscaCadenaAlt(vSincroCSC, "Velocidad(.+)" . wCRLF . "(.+)" . wCRLF . "(.+)") <> "-1")
vSincroCSCCorto .= vResCAD[0] . wCRLF . wCRLF
If (BuscaCadenaAlt(vSincroCSC, "Atenuación(.+)" . wCRLF . "(.+)" . wCRLF . "(.+)" . wCRLF) <> "-1")
vSincroCSCCorto .= vResCAD[0] . wCRLF
MsgBox % vSincroCSCCorto
Return
; Buca una cadena de texto (RegExMatch), ...
; devuelve -1 si no la localiza.
; vResCad[n], n de 1 a 9 devuelve la cadena específica según la posición de búsqueda
; en el elemento 0 devuelve la cadena buscada completa.
;
BuscaCadenaAlt(wDondeBucar, wQueBuscar)
{
vPos := RegExMatch(wDondeBucar, wQueBuscar, SubPat)
If (vPos = 0)
Return "-1"
vResCad[0] := Trim(SubPat)
vResCad[1] := Trim(SubPat1)
vResCad[2] := Trim(SubPat2)
vResCad[3] := Trim(SubPat3)
vResCad[4] := Trim(SubPat4)
vResCad[5] := Trim(SubPat5)
vResCad[6] := Trim(SubPat6)
vResCad[7] := Trim(SubPat7)
vResCad[8] := Trim(SubPat8)
vResCad[9] := Trim(SubPat9)
Return vResCad
}
Estabilidad del servicio RISKY
SNR [dB]
Downstream Value 9.4 dB
Upstream Value 9.9 dB
Velocidad de sincronismo actual [kb/s]
Downstream Value 544.0 kb/s
Upstream Value 823.0 kb/s
Velocidad máxima alcanzable [kb/s]
Downstream Value 732.0 kb/s
Upstream Value 816.0 kb/s
Atenuación [dB]
Downstream Value 44.4 dB
Upstream Value 35.4 dB
Potencia [dBm]