Ayuda con Clipboard Topic is solved

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

Moderator: Flipeador

jusaampo
Posts: 4
Joined: 13 Jul 2022, 18:20

Ayuda con Clipboard

Post by jusaampo » 13 Jul 2022, 19:13

Saludos cordiales, por favor, agradecería mucho si pudieran ayudarme con la siguiente situación.

En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90

Lo que buscaba era quedarme únicamente con el 31 del primer caso, o con el 5 del segundo caso o con el 90 del tercer caso. Aclarar que el 31, el 5 y el 90 son solo ejemplos, pués pueden ser números más grandes (es decir 670, o 1014, o 1897, etc) pero siempre siempre hay un caracter o símbolo raro o letra antes del número como en los ejemplos.

sofista
Posts: 654
Joined: 24 Feb 2020, 13:59
Location: Buenos Aires

Re: Ayuda con Clipboard

Post by sofista » 14 Jul 2022, 09:14

Hola: Sin lugar a dudas lo haría con RegEx. El inconveniente que veo es que la descripción del problema no es muy precisa, mientras que RegEx requiere criterios claros para hallar el texto deseado. Al fin y al cabo, una expresión regular describe patrones y esto es justamente lo que no está definido.

No obstante lo dicho, este código encuentra los tres grupos de números indicados, aunque podría fallar en otros casos:

Code: Select all

Clipboard := "En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90"

while pos := RegExMatch(Clipboard, "\W\K\d+|\d+(?=\s)", m, pos ? pos + StrLen(m) : 1)
	MsgBox, % m
La expresión regular se divide en dos partes: la primera, \W\K\d+, dice algo así como "selecciona uno o más dígitos precedido/s por un símbolo que no sea dígito o letra" —captura "31" y "90"—, mientras que la segunda, \d+(?=\s), selecciona uno o más dígitos seguido/s de un espacio.

Para finalizar, copia del cuadro de mensajes el número que necesites.

Saludos.

jusaampo
Posts: 4
Joined: 13 Jul 2022, 18:20

Re: Ayuda con Clipboard

Post by jusaampo » 14 Jul 2022, 14:09

sofista wrote:
14 Jul 2022, 09:14
Hola: Sin lugar a dudas lo haría con RegEx. El inconveniente que veo es que la descripción del problema no es muy precisa, mientras que RegEx requiere criterios claros para hallar el texto deseado. Al fin y al cabo, una expresión regular describe patrones y esto es justamente lo que no está definido.

No obstante lo dicho, este código encuentra los tres grupos de números indicados, aunque podría fallar en otros casos:

Code: Select all

Clipboard := "En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90"

while pos := RegExMatch(Clipboard, "\W\K\d+|\d+(?=\s)", m, pos ? pos + StrLen(m) : 1)
	MsgBox, % m
La expresión regular se divide en dos partes: la primera, \W\K\d+, dice algo así como "selecciona uno o más dígitos precedido/s por un símbolo que no sea dígito o letra" —captura "31" y "90"—, mientras que la segunda, \d+(?=\s), selecciona uno o más dígitos seguido/s de un espacio.

Para finalizar, copia del cuadro de mensajes el número que necesites.

Saludos.
Gracias por responder. Tiene razón podría fallar en otros casos, como este: 6c89. Yo solo estaría interesado en el 89.

sofista
Posts: 654
Joined: 24 Feb 2020, 13:59
Location: Buenos Aires

Re: Ayuda con Clipboard

Post by sofista » 14 Jul 2022, 15:18

Veo, pero tiene arreglo con esta otra expresión que captura los cuatro casos requeridos: selecciona uno o más dígitos precedidos por uno o más dígitos y uno o más caracteres que no sean dígitos.

Code: Select all

Clipboard := "En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90 o 6c89"

while pos := RegExMatch(Clipboard, "\d+\D+\K\d+", m, pos ? pos + StrLen(m) : 1)
	MsgBox, % m
Un dato relevante es establecer el o los caracteres que puede/n seguir al número a capturar o si éste se encuentra al final de línea. Esta información sigue siendo desconocida y es potencialmente de mucha ayuda.

jusaampo
Posts: 4
Joined: 13 Jul 2022, 18:20

Re: Ayuda con Clipboard

Post by jusaampo » 14 Jul 2022, 18:24

sofista wrote:
14 Jul 2022, 15:18
Veo, pero tiene arreglo con esta otra expresión que captura los cuatro casos requeridos: selecciona uno o más dígitos precedidos por uno o más dígitos y uno o más caracteres que no sean dígitos.

Code: Select all

Clipboard := "En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90 o 6c89"

while pos := RegExMatch(Clipboard, "\d+\D+\K\d+", m, pos ? pos + StrLen(m) : 1)
	MsgBox, % m
Un dato relevante es establecer el o los caracteres que puede/n seguir al número a capturar o si éste se encuentra al final de línea. Esta información sigue siendo desconocida y es potencialmente de mucha ayuda.
Gracias por responder. Con este Clipboard no funciona.

Code: Select all

Clipboard := "p123"

while pos := RegExMatch(Clipboard, "\d+\D+\K\d+", m, pos ? pos + StrLen(m) : 1)
	MsgBox, % m
Por cierto, el número a capturar siempre se encuentra al final de la línea.

sofista
Posts: 654
Joined: 24 Feb 2020, 13:59
Location: Buenos Aires

Re: Ayuda con Clipboard  Topic is solved

Post by sofista » 14 Jul 2022, 19:07

jusaampo wrote:
14 Jul 2022, 18:24
Por cierto, el número a capturar siempre se encuentra al final de la línea.
Ah, bueno, esta información simplifica el problema y la expresión regular:

Code: Select all

data := "
(
bla bla42 i1�31
561 bla5bla p9�c5
j5¢90
6c89
p123
)"

while pos := RegExMatch(data, "\d+(?=\R|$)", m, pos ? pos + StrLen(m) : 1)
	MsgBox, % m
Saludos

jusaampo
Posts: 4
Joined: 13 Jul 2022, 18:20

Re: Ayuda con Clipboard

Post by jusaampo » 18 Jul 2022, 18:30

@sofista

Perdón por la demora en responder, funciona muy bien. Muchas gracias por todo el apoyo.

sofista
Posts: 654
Joined: 24 Feb 2020, 13:59
Location: Buenos Aires

Re: Ayuda con Clipboard

Post by sofista » 18 Jul 2022, 19:34

No hay problema. Me alegra haber sido de ayuda :D

Post Reply

Return to “Pedir Ayuda”