관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

오토핫키 강좌 (초보편 #02 ) 본문

AUTOHOTKEY/도움말

오토핫키 강좌 (초보편 #02 )

님투 2009. 1. 3. 17:24

이전 강좌에서는 메세지를 출력하고 그것을 활용하는 간단한 부분에 대해서 살펴 보았습니다.
오늘은 조건문, 반복문 등등에 뼈대 부분을 공부해볼까 합니다. 사실 명령어나 함수들은 레퍼런스를 통해서 얼마든지 따로 공부할 수 있는 부분이라 아직 응용은 안되더라도 기본 골자를 우선으로 하겠습니다.

1. 루프 (반복문) Loop

오토핫키에서는 다수의 방식을 제공하고 있습니다. 고급언어 (C,C++,Delphi, Java) 들도 반복문을 제공하지만 오토핫키의 loop 처럼 사용할려면 복잡한 코딩을 거쳐야만 가능합니다.

예를 들어서 for 문을 보면 for (i = 0; i < 10; i++){ ... } 과 같은 몇번 반복해라 이구문도 오토핫키에서는 Loop, 3 으로 끝나게 됩니다. 또 다른 예를 들면 해당 폴더의 폴더갯수나 폴더의 파일 갯수가 몇개인지를 알아내서 그 갯수만큼 루프를 돌려라 이런 기능을 수행할려면 복잡한 과정을 거쳐야만 가능하지만 오토핫키는 한줄로 그 기능을 수행합니다.  아래 예를 살펴보겠습니다.

[일반루프]

Loop  ; 무할루프를 돕니다. (아무것도 정해지지 않으면 여기에  Loop[, Count] 처럼되면 그 갯수만큼만 루프)
{
  if A_Index >= 10  ; 루프가 10 번을 돌거나 넘어서면 ...
    break  ; 현재 루프를 빠져나와라
}

※ 여기서 A_Index 라는 것이 나왔습니다.  현재 루프가 몇번째 인지 카운터 되는 편입변수 입니다.
    편입변수에는 정말 다양한 변수들이 내정되어 있습니다. 차후 강좌에서 따로 다루던지 매번 나오는 예제에는 웬만하면 
    사용됩니다.


[폴더나 파일갯수 만큼 루프]

Loop , %A_ProgramFiles%\*.txt, , 1  ; 이 옵션은 프로그램파일 폴더의 서브폴더 까지 모두 포함
{
  FileTxtList = %FileTxtList%`n%A_LoopFileFullPath%  ; FileTxtList 라는 변수에 확인한 파일을 계속 적재 한다.
  MsgBox, 4, , Filename = %A_LoopFileFullPath%`n`n 계속?  ; 확인한 파일을 보여주고 중지할 것인지 묻는다.
  IfMsgBox, No                                                                ;  이 부분은 전번 강좌에 있으므로 ...
      break                                                                        ; 안보겠다면 중지한다.
}

Msgbox, %FileTxtList%    ;  적대된 파일을 MsgBox 창으로 보여준다.. 너무 많으면  무리가 있으므로 적당히...

※ %A_ProgramFiles% 편입변수 시스템드라이브의 C:\Program Files 를 결과적으로 가르킨다.
    끝에 1  옵션이 서브폴더 모두라는 명령어 옵션이다. 이번 기회에 모든 JPG 파일을 검색해서 파일로 
    담아보도록 하겠습니다.

특정 시스템의 JPG 이미지를 찾아서 파일 목록을 파일로 저장해보겠습니다.
아래 소스는 원하는 위치의 서브디렉토리에서 해당 파일을 찾아서 파일로 저장합니다.
소스는 더보기를 클릭하세요


[문자열에 따른 루프]

예제 #1
Colors = red,green,blue
Loop, parse, Colors, `,
{
    MsgBox, Color number %A_Index% is %A_LoopField%.
}

※ 여기서 전역변수 %A_LoopField% 는  예를 들어서 설명하자면  배열의 필드 값입니다.
    메세지는 순서적으로 red,green,blue  를 출력할 것입니다.

예제 #2
Loop, read, C:\Database Export.csv ; 주소록 파일을 연다
{
    LineNumber = %A_Index% ; 현재 라인의 번호
    Loop, parse, A_LoopReadLine, CSV ; 현재 라인의 데이터를 나눈다.(파셔)
    {
        ; A_LoopField (편입변수) 는 나누어진 값
        MsgBox, 4, , Field %LineNumber%-%A_Index% is : `n %A_LoopField% `n`n Continue?
        IfMsgBox, No  ; 그만보겠다면 빠져나간다
            return  
    }
}

네이버의 주소록 내보내기로 (naver_addr.csv) 작업해보면 직접 눈으로 확인 가능합니다.

    01. 이름(네이버),
    02. 이메일,
    03. 휴대폰,
    04. 집전화번호,
    05. 개인홈페이지,
    06. 회사/학교,
    07. 회사팩스,
    08. 회사전화,
    09. 부서/학과명,
    10. 회사주소,
    11. 집주소,

이런 순서대로 각 필드의 값을 출력합니다.

예제 #3
Loop, read, naver_addr.csv
{
    Loop, parse, A_LoopReadLine, %A_Tab%
    {
        MsgBox, 4, , Field number %A_Index% is %A_LoopField%.
        IfMsgBox, No
            return
    }
}

※ 줄단위의 데이터를 출력합니다.







오늘은 반복문에 대해서 공부를 해보았습니다.
오늘은 중간 중간 어려운 부분이 많았다고 보는데 어떠신지 모르겠습니다. 완전 이해가 아니라도 어느정도의 감만 챙기셔도 오늘은 충분히 잘한거라고 봅니다.

더 다양한 예제들도 많치만 아직은 보면 더 헷갈릴 수 있으니 차차 또 배워가도록 하는게 좋겠습니다.

2 Comments
  • 프로필사진 4ram 2009.10.23 15:27 좋은 자료 감사합니다~
    최근에 autohotkey 를 접하게 되어 공부를 시작했는데,
    생각보다는 배울수 있는 사이트가 적더군요, ㅠ
    검색에 검색을 하다보니 이런 좋은 곳까지 오게 되었습니다~ ^^

    그런데 초보편인데 저 같은 일반인에겐 조금 어렵네요, ㅠ
    특히 변수들이 이미 정의가 되어있는 것들인거 같아서, 이해가, ㅠ
    물론 이 단계에서 설명하셔도 이해하기 힘든 것들이라 설명을 안하신거겠죠? ^^
    뭐 일단 그냥 그렇구나 하고 공부해야 겠습니다

    어째뜬 좋은 자료 감사합니다~ ^ㅡ^

    p.s 위 이미지 파일들을 파일리스트에 저장하는 소스에서 확장자를 jgp 에 gif 추가해서 동시 검색하는 것이 가능할까요?
  • 프로필사진 Favicon of https://xaya.tistory.com BlogIcon 사야오빠 2013.02.02 13:58 신고 뭔가 모르게 C와 Basic을 섞어 놓은 듯한 느낌이네요.^^
댓글쓰기 폼