Page 1 of 1

copiar primeros dos caracteres (letras) de una linea

Posted: 05 Feb 2018, 12:54
by Daenerys
Hola,

No acabo de conseguir los siguiente, a ver si alguien me puede echar un cable por favor

tengo una linea de texto así

- SI8787 dsajdklsajdklsajkldaskj
- SI9898 jdksjadklsajdklsaj
SI8r98 nmskjdksjkds


Lo que quiero es copiar al clipboard los dos primeros caracters (SI) pero para ello tengo que evitar los espacios y el guion -
(entiendo que la solución seria copiar toda la linea al clipboard y copiar los dos primero caracteres alfanumericos, pero no hay manera)

Alguien me puede ayudar ?
Gracias

Re: copiar primeros dos caracteres (letras) de una linea

Posted: 05 Feb 2018, 16:16
by garry
ejemplo

Code: Select all

e4x=
(Ltrim Join`r`n
- SI8787 dsajdklsajdklsajkldaskj
- SI9898 jdksjadklsajdklsaj
SI8r98 nmskjdksjkds
)

clipboard=
stringreplace,e4x,e4x,-,,all
Loop,parse,e4x,`n,`r
 {
 T=%A_LoopField%
 t=%t%
 stringmid,k,t,1,2
 e .= k . "`r`n"
 }
;msgbox,%e%
clipboard=%e%                 ;- save to clipboard
gosub,sendtonotepad
return

sendtonotepad:
pr=notepad.exe
sc=ahk_exe notepad.exe
IfWinNotExist,%sc%
 {
 Run, %pr%,,,pid1
 scx:= "ahk_pid " . PID1
 WinWait,%scx%
 }
IfWinNotActive ,%scx%,,WinActivate,%scx%
    WinWaitActive,%scx%
send,^v                      ;- send to notepad (SI)
clipboard=
return
;========================================================

Re: copiar primeros dos caracteres (letras) de una linea

Posted: 05 Feb 2018, 16:38
by A_AhkUser
Hola Daenerys,

Puedes tambien utilizar funciones nativas.

Code: Select all

#NoEnv
input := "- SI8787 dsajdklsajdklsajkldaskj"
input := LTrim(input, "- ") ; remueve si procede los espacios y el guion desde la izquierda de la cadena de caracteres y pone al dia 'input' con la nueva cadena devuelta por LTrim
var := SubStr(input, 1, 2) ; rescata los dos primeros caracteres de 'input'
; clipboard :=  var ; pone al portepapeles el contenido de 'var'
MsgBox % var ; meustre el contenido de la variable 'var'

Re: copiar primeros dos caracteres (letras) de una linea

Posted: 06 Feb 2018, 04:47
by Daenerys
Muchismas gracias a los dos!
:superhappy:

Re: copiar primeros dos caracteres (letras) de una linea

Posted: 12 Feb 2018, 14:25
by Daenerys
Hola A_AhkUser

Me ha ido fantastico tu ejemplo, muchas gracias ... haciendo pruebas con el , no he sido capaz de hacer una pequeña modificacion en esta linea

input := LTrim(input, "- ")

me gustaria añadir un "digit, number (he leido en documentacion que seria para indicar cualquier numero), o un simple numero) en el input ... algo como input := LTrim(input, "digit- ") o si no es posible, un simple 3, input := LTrim(input, "3- ")

¿ es posible ? porque probando "directamente" no me ha funcionado.

Gracias

Re: copiar primeros dos caracteres (letras) de una linea  Topic is solved

Posted: 12 Feb 2018, 21:20
by A_AhkUsuario
Hola Daenerys,

Este codigo deberia funcionar:

Code: Select all

#NoEnv
input := "3- SI8787 dsajdklsajdklsajkldaskj"
; input := "- SI8787 dsajdklsajdklsajkldaskj"
input := LTrim(input, "1234567890- ") ; remueve si procede los espacios, los guiones y los digitos desde la izquierda de la cadena de caracteres y pone al dia 'input' con la nueva cadena devuelta por LTrim
var := SubStr(input, 1, 2) ; rescata los dos primeros caracteres de 'input'
; clipboard :=  var ; pone al portepapeles el contenido de 'var'
MsgBox % var ; muestre el contenido de la variable 'var'
O quizas ya es tiempo de que utilices el poder de las expresiones regulares:

Code: Select all

#NoEnv
/* 
regex (expresiones regulares):
	- ^ match si la expresión regular aparece al inicio del input - '^esc' match "esconder", al lo contrario, no match "descansar"
	- \d match cualquiera sea la cifra (digito)
	- ? el carácter precedente puede aparecer de forma opcional - 'a\d?b' match no solo "a3b", "a7b" sino tambien "ab"
	- \s match sobre todo un espacio o una tabulación
	\K quita todos los caracteres precedentes del match - 'hola\s?mun\Kdo' match no solo "holamundo" sino tambien "hola mundo" y devuelve en todos los casos "do"
	.  (punto) match un carácter sea cual sea
	>>> https://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm
*/
input := "3- SI8787 dsajdklsajdklsajkldaskj"
var := RegExMatch(input, "^\d?-\s\K..", match)
MsgBox % match
input := "- SI8r98 nmskjdksjkds"
var := RegExMatch(input, "^\d?-\s\K..", match)
MsgBox % match
documentacion:
Regular Expressions (RegEx) - Quick Reference
RegExMatch
RegExReplace

Re: copiar primeros dos caracteres (letras) de una linea

Posted: 13 Feb 2018, 04:54
by Daenerys
Perfecto. me pongo a investigar con ello :)
:)

muchisimas gracias