47 - [오토핫키] 문자열관리, 파싱 (1)

    Parsing (파싱)은 문장의 문법적인 구성을 분석하는 과정을 나타내는 용어로 사용됩니다. 오토핫키의 문자열관리는 해당 역할을 하는 명령어와, 이와 똑같은 기능을 하는 내장함수가 존재하며 어느것을 사용해도 무방하지만 사용 방법에는 약간씩 차이점이 있어요. 문자열관리는 내용이 길어지므로 여러편에 나누어 올리도록 하겠습니다.

     

     

    문법 : 문자가 존재하는가 찾기

    IfInString, var, SearchString

    IfNotInString, var, SearchString

     

    설명

    var

    검색할 내용을 담고 있는 변수의 이름.

    SearchString

    검색할 문자열 (검색어)

     

     

    예제

    예제1)

    var =  ;변수에 여러줄을 담을땐 소괄호!

    (

    동해물과 백두산이 마르고 닳도록

    하느님이 보우하사 우리 나라 만세

    무궁화 삼천리 화려강산

    대한사람 대한으로 길이 보전하세

    )

     

    SearchString = 삼천리  ;검색어 - 바꿔보세요.

    IfInString, var, %SearchString%

    MsgBox, %SearchString%를 발견!

    Else

    MsgBox, %SearchString%가 없습니다.

    Return

    예제2)

    var =  ;변수에 여러줄을 담을땐 소괄호!

    (

    여 : 니가 나한테 어떻게 이럴 수 있어!?

    남 : 미안해...

    여 : 뭐가 미안한데?

    남 : 뭐든 정말 다 미안해

    여 : 니가 뭘 잘못한지도 모르고 사과를 해?

    남 : 자기전에 전화 안한거 미안해

    여 : 됐어 우리 헤어져!

    )

     

    SS = 돼지  ;검색어 - 바꿔보세요.

    MsgBox

      , 남자는 여자에게 %SS%라고 했을까요?

    IfInString, var, %SS%, MsgBox, 했다.

    IfNotInString, var, %SS%, MsgBox, 안했다.

    Return

     

    IfInString은 해당하는 검색어가 있는지 없는지 유무만 검색합니다. 그리고 특이한 점은 예제2 처럼 다른 명령어와 한줄에 함께 사용이 가능합니다.

     

    문법 : 문자의 위치 찾기

    StringGetPos, OutputVar, InputVar, SearchText [, L#|R#, Offset]

    Position := InStr(Haystack, Needle [, CaseSensitive?, StartingPos, Occurrence])

     

    설명

    OutputVar

    위치값을 저장할 변수 이름. 첫 문자라면 0

    InputVar

    검색할 내용을 담고 있는 변수의 이름.

     

    SearchText

    검색할 문자열 (검색어)

     

    L#|R#

    동일한 검색어가 반복 될때 왼쪽 혹은 오른쪽에서 부터 몇번째에 부합하는지를 결정

     

    Offser

    검색을 건너뛰고 시작할 문자 개수. 표현식 가능

     

     

    예제

    예제1)

    var =  ;변수에 여러줄을 담을땐 소괄호!

    (

    동해물과 백두산이 마르고 닳도록

    하느님이 보우하사 우리 나라 만세

    무궁화 삼천리 화려강산

    대한사람 대한으로 길이 보전하세

    )

     

    SearchString = 삼천리  ;검색어 - 바꿔보세요.

    StringGetPos, Num, var, %SearchString%

    MsgBox, %Num%

    Return

    예제2)

    var =  ;변수에 여러줄을 담을땐 소괄호!

    (

    여 : 니가 나한테 어떻게 이럴 수 있어!?

    남 : 미안해...

    여 : 뭐가 미안한데?

    남 : 뭐든 정말 다 미안해

    여 : 니가 뭘 잘못한지도 모르고 사과를 해?

    남 : 자기전에 전화 안한거 미안해

    여 : 됐어 우리 헤어져!

    )

     

    SS = 여 :  ;검색어 - 바꿔보세요.

    StringGetPos, Num1, var, %SS%, L3

    MsgBox, %Num1%

    StringGetPos, Num2, var, %SS%, R2

    MsgBox, %Num2%

    Return

     

    내장함수 InStr(Haystack, Needle [, CaseSensitive=false, StartingPos=1, Occurrence=1]) 는 Haystack에 담겨있는 문자열에서 Needle의 위치를 돌려줍니다. StringGetPos는 첫 문자가 0이였지만 InStr은 검색어를 발견하지 못했을때 0을 돌려주기 때문에 첫 문자가 1이 됩니다. 그리고 CaseSecsitive를 생략하거나 false라면 대소문자를 구분하지 않습니다. StartingPos는 StringGetPos의 Offset과 같이 시작 값을 지정하며 생략할 경우 1입니다.

    Occurrence값은 L#과 마찬가지로 부합하는 위치를 지정합니다.

    따라서 예제2의 경우 MsgBox % InStr(var, SS, , , 3) 이렇게 작성면 똑같은 결과를 얻을 수 있습니다. 결과에서 1이 높은 이유는 InStr의 경우 첫 문자가 0이 아닌 1이기 때문입니다.

     

     

     

     

    Posted by 옹봉이