레이블이 String인 게시물을 표시합니다. 모든 게시물 표시
레이블이 String인 게시물을 표시합니다. 모든 게시물 표시

2016. 3. 1.

AutoHotkey 최신버전 체크하는 스크립트

스크립트에 대한 설명:

인터넷에서 어떻게 문자열을 읽고 자르고, 변수로 사용하는가를 익히기 위해 연습삼아 만들어 본 것입니다.
오토핫키 베이직 프로그램의 현재 버전과 인터넷상의 버전을 비교하여 최신버전인지를 확인하는 스크립트 입니다.
응용은 각자 알아서~ (사실 이것도 기간제한 예제 올라온걸 보고 응용해 본 것이라지요.)

스크립트를 짜면서 어려웠던 점,
1. StringLeft를 모르고 StringtimeLeft로 자른 내용중에 필요한 앞부분만 어떻게 잘라야 할지 몇시간 고민.
(URLSearchString 예제파일-인터넷 소스를 다운받아 url 부분만 잘라내서 주소부분만 새로운 파일로 정리해주는 스크립트-을 분석하는등 삽질좀 했는데 짜놓고 나니까 생각보다 너무 간단.)

2. FileGetVersion으로 확인하면 1.0.48.5로 나오는데, 인터넷상의 버전은 1.0.48.05로 나와서 어떻게 비교해야할지 잠시 고민. 1.0.48까지만 잘라서 비교하도록 수정. (<h2>1.0.48.02 - April 19, 2009</h2> 이런식의 소스)

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


FileGetVersion, version, %A_ProgramFiles%AutoHotkeyAutoHotkey.exe
stringleft, ver, version, 6

urldownloadtofile,http://www.autohotkey.com/changelog/,%A_ProgramFiles%AutoHotkeyverchk.txt
fileread,checkver,%A_ProgramFiles%AutoHotkeyverchk.txt
stringgetpos,pos,checkver,<h2>
envadd,pos,4
stringtrimLeft, output, checkver, pos
stringleft, last, output, 6

if ver = %last%
 {
  msgbox, 최신 버전 입니다.
 }
else
 {
  msgbox, 새로운 버전이 있습니다.
 }
filedelete,%A_ProgramFiles%AutoHotkeyverchk.txt
return



[출처:http://v1.autohotkey.co.kr/cgi/board.php?bo_table=script&wr_id=1098&page=10]

2016. 2. 27.

복사한 내용을 쉽게 액셀에 자동 입력


;자동 액셀 입력 스크립트
;엑셀에 손쉽게 데이터를 입력하기 위해 작성된 간단한 스크립트 입니다.





Start: ;라벨이름
Clipboard := "" ;클립보드 초기화
Clipwait ;클립보드에 내용이 입력되기를 기다림

string=%Clipboard% ;클립보드 내용을 변수 string에 대입
!v:: ;단축키 Alt + v 지정
Loop, parse, string, `n, `r ; 변수 string에 입력된 내용을 줄바꿈이 있을 때 마다 한번씩 잘라 냄
{
 StringSplit, input_var, A_LoopField, %A_SPACE% ;잘라내어진 한줄의 내용 중 스페이스를 기준으로 다시 문자열을 나누기
 Send, %input_var1%{SC14D}%input_var2%{SC14D}%input_var3%{SC14D}{Enter}{Home} ;나누어진 문자열을 입력 {SC14D}: 오른쪽 커서, {Enter}:엔터, {Home}:기능키 Home
}
MsgBox, 입력완료! ;입력이 완료되었음을 알림
Goto Start ;스크립트를 초기실행 시 처럼 다시 처음으로 되돌아 감

ESC::ExitApp ;ESC를 누르면 스크립트 강제종료
 


;테스트용 클립보드 복사 내용
;스크립트 실행 후 다음 내용을 선택하여 Ctrl + C를 이용하여 클립보드로 복사한다.
;그런 다음 엑셀을 실행시키고 Alt + V를 누르면 다음 내용이 자동으로 입력 된다.
;입맛에 맞게 정렬 하거나 용도에 맞게 편집하여 쓰면 된다.

/*
2010123456 5 70
2007143416 4 100
2008423351 2 50
2010173426 1 80

*/





숫자 13자리 입력시 자동으로 엔터키 입력

hotstrings("(\d{13})" , "%$1%{enter}")  
/*
Function: hotstrings
Dynamically adds regular expression hotstrings.

Parameters:
c - regular expression hotstring
a - (optional) text to replace hotstring with or a label to goto, 
leave blank to remove hotstring definition from triggering an action

Examples:
> hotstrings("(B|b)tw\s", "%$1%y the way") ; type 'btw' followed by space, tab or return
> hotstrings("i)omg", "oh my god{!}") ; type 'OMG' in any case, upper, lower or mixed
> hotstrings("\bcolou?r", "rgb(128, 255, 0);") ; '\b' prevents matching with anything before the word, e.g. 'multicololoured'

License:
- Version 2.59 <http://www.autohotkey.net/~polyethene/#hotstrings>
- Dedicated to the public domain (CC0 1.0) <http://creativecommons.org/publicdomain/zero/1.0/>
*/

hotstrings(k, a = "")
{
static z, m = "*~$", s, t, w = 2000, sd, d = "Left,Right,Up,Down,Home,End,RButton,LButton"
global $
If z = ; init
{
RegRead, sd, HKCU, Control Panel\International, sDecimal
Loop, 94
{
c := Chr(A_Index + 32)
If A_Index not between 33 and 58
Hotkey, %m%%c%, __hs
}
e = 0,1,2,3,4,5,6,7,8,9,Dot,Div,Mult,Add,Sub,Enter
Loop, Parse, e, `,
Hotkey, %m%Numpad%A_LoopField%, __hs
e = BS,Space,Enter,Return,Tab,%d%
Loop, Parse, e, `,
Hotkey, %m%%A_LoopField%, __hs
z = 1
}
If (a == "" and k == "") ; poll
{
StringTrimLeft, q, A_ThisHotkey, StrLen(m)
If q = BS
{
If (SubStr(s, 0) != "}")
StringTrimRight, s, s, 1
}
Else If q in %d%
s =
Else
{
If q = Space
q := " "
Else If q = Tab
q := "`t"
Else If q in Enter,Return,NumpadEnter
q := "`n"
Else If (RegExMatch(q, "Numpad(.+)", n))
{
q := n1 == "Div" ? "/" : n1 == "Mult" ? "*" : n1 == "Add" ? "+" : n1 == "Sub" ? "-" : n1 == "Dot" ? sd : ""
If n1 is digit
q = %n1%
}
Else If (StrLen(q) != 1)
q = {%q%}
Else If (GetKeyState("Shift") ^ GetKeyState("CapsLock", "T"))
StringUpper, q, q
s .= q
}
Loop, Parse, t, `n ; check
{
StringSplit, x, A_LoopField, `r
If (RegExMatch(s, x1 . "$", $)) ; match
{
StringLen, l, $
StringTrimRight, s, s, l
SendInput, {BS %l%}
If (IsLabel(x2))
Gosub, %x2%
Else
{
Transform, x0, Deref, %x2%
SendInput, %x0%
}
}
}
If (StrLen(s) > w)
StringTrimLeft, s, s, w // 2
}
Else ; assert
{
StringReplace, k, k, `n, \n, All ; normalize
StringReplace, k, k, `r, \r, All
Loop, Parse, t, `n
{
l = %A_LoopField%
If (SubStr(l, 1, InStr(l, "`r") - 1) == k)
StringReplace, t, t, `n%l%
}
If a !=
t = %t%`n%k%`r%a%
}
Return
__hs: ; event
hotstrings("", "")
Return
}
 
 
 

2016. 2. 26.

짧지만 유용한 암호화/복호화 기법(XOR 암호화 활용)

[출처 : http://autohotkey.co.kr/b/1-1650 나로님 공유스크립트]



exampleText := "동해물과 백두산이 마르고 닳도록`nDo you know encryption?"
msgbox, % "<원문>`n" exampleText "`n`n<암호문>`n" encrypt(exampleText) "`n`n<복호문>`n" encrypt(encrypt(exampleText))
Return

encrypt(text)
{
  String =
  Loop, parse, text
  {
      char := Asc(A_LoopField)^Asc("1")^Asc("2")
      String .= "`" . chr(Char)
  }
  Return, %String%
}



2016. 2. 22.

[펌] 문자열 정규식과 쌍따옴표의 이해

1) RegExReplace

string = <sdw999!@SS**ghrefad/>>?+%##..남기는,/^<adfa><adfwa>문자열/adf>

msgbox,% RegExReplace(string, "<[^>]*>")

위의 예문은,
<로 시작해서 >로 끝나는 문자열을 string 변수에 담은 후
특수문자들을 제거한 정규식입니다.



2) RegExMatch

(http://autohotkey.co.kr/b/5-39553 오핫사 도움받기전문 님의 질문과 답변글을 펌하였습니다.)

파싱을 해온 웹의 html 문자열중 class를 표시하는 문구가 <td class="td"> 라고 되있습니다.
 
원하는 문자열을 구하기 위해
 
regexmatch(p,"<td class="td">(."?)</td>",var)
msgbox,%var1%
 
이렇게 하니 역시나 예상대로 따옴표가 들어가니 오류를 뿜더군요.
저 따옴표를 어떻게 처리해야 단순한 텍스트로 읽어들이나요?

----------------------------------------------------------------------
위의 질문이 최초 질문이었는데 홀로 해결하였습니다.
d=
(
"
)
s=
(
;
)
a=
(
amp
)
StringReplace,test,test,%d%,, All
StringReplace,test,test,%s%,, All
StringReplace,test,test,%a%,, All
 
이런식으로 모두 없에버렸습니다. 하핫...
해결 하니 새로운 궁금증이 생기는군요 ㅠㅠ
 
html 소스를 우선 저렇게 하여 제가 원하는 텍스트를 불러오기는 성공 하였으나.
그뒤에 제가 원하는 스크립트가 더 있음에도 불과하고 맨 위에 있는 최초의 텍스트만 계속해서 출력해냅니다.
 
RegExMatch(test,"<td class=fd>(.*?)</td>",var)
<td class=fd>이 구문과  </td>이 구문 사이에 있는 텍스트가 10가지가 넘는데 제일 상위에 있는 텍스트밖에는 가져오질 못하는군요.
모두 불러오고 싶은데 어떻게 해야할까요?

* 답변 :

대상물 =
(
<span class="btn_arw top"><a href="#" > <span class=" ~
)
정규식 := "span (.*)a href"
첫만남 := RegExMatch( 대상물, 정규식, 쪽집게)
MsgBox,
(
 `n`n %대상물%
 `n`n %정규식%
 `n`n %쪽집게%
 `n`n %쪽집게1%
 `n`n %첫만남%
 `n`n %ErrorLevel%
)
Return

하나씩 차분하게 짚으면서 진행하면 별로 어렵지 않습니다.
상당히 귀찮기는 합니다.




[쌍따옴표 탈출식의 이해와 예제]

(https://autohotkey.com/board/topic/114246-escaping-quotes/?hl=%252Bdouble+%252Bquotation 질문과 답변글을 펌하였습니다.)

문자열 혹은 변수에서 쌍따옴표(")가 문제가 될 때가 있는데
그때에는 쌍따옴표를 두번 연이어 써주면 해결되는 경우가 있다.
아래와 같은 경우이다.


제가 구현하고자 하는 기능은 간단합니다. 아래와 같이 표현시키고싶은데요.
"VAR1,VAR2"

이렇게 반복되는 식인데,..

VAR3 := % ""VAR1 "," VAR2""
이렇게 접근해서 소스를 짰더니 var2 에서 illegal character 오류가 났다고 뜨는겁니다.
어떻게 해결할까요???






첫번째 분 답변 :
text := """QuotedString""" ;text now contains "QuotedString"

 if ("""QuotedString""" = text) msgbox % "It works`n" text

예)

var1 := "aaa" var2 := "bbb" var3 := """" var1 "," var2 """" msgbox % var3



두번째 분 답변 :

VAR1=abc
VAR2=123
VAR3 = "%VAR1%","%VAR2%"
MsgBox, %VAR3%