copiar primeros dos caracteres (letras) de una linea

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: copiar primeros dos caracteres (letras) de una linea

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

Post by Daenerys » 13 Feb 2018, 04:54

Perfecto. me pongo a investigar con ello :)
:)

muchisimas gracias

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

Post by A_AhkUsuario » 12 Feb 2018, 21:20

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:

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

Post by Daenerys » 12 Feb 2018, 14:25

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

Post by Daenerys » 06 Feb 2018, 04:47

Muchismas gracias a los dos!
:superhappy:

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

Post by A_AhkUser » 05 Feb 2018, 16:38

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

Post by garry » 05 Feb 2018, 16:16

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
;========================================================

copiar primeros dos caracteres (letras) de una linea

Post by Daenerys » 05 Feb 2018, 12:54

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

Top