⚠ 이 강좌는 오토핫키 v1을 다룹니다
지금 보시는 강좌는 구버전 오토핫키(v1.1)를 다루고 있습니다. 따라서 본 강좌의 내용은 현재 최신 오토핫키 버전 (v2.0)과 호환되지 않습니다. 구버전의 정보가 필요한 것이 아니라면, 가능한 한 새로운 사이트에 작성한 v2 강좌(https://ahkv2.pnal.dev)를 봐주시길 바랍니다.
Loop, Parse. 매개변수까지 통째로 제목에 넣는 경우가 거의 없었습니다. (Gui, Submit, NoHide 말고 또 있나요?)
Loop와의 구별을 두기 위해 이렇게 두었습니다. 사실 Loop는 이런식으로 확장판이 몇 가지가 더 있는데, 강좌에서는 이것만 설명합니다.
문자열을 끊어서 읽어주는 Loop, Parse
Loop, Parse 구문은 어떠한 문장을 받아서, 특정 문자열을 기준으로 하여 끊어 읽어주는 역할을 합니다.
Loop, Parse, InputVar [, Delimiters, OmitChars]
- Parse: Loop의 확장판 중 Parse를 사용한다는 의미입니다. Loop, Parse를 한 구문으로 외워두세요. 굳이 따지면 매개변수이긴 합니다. Loop, Parse를 명령어로, InputVar를 첫 번째 매개변수처럼 생각하셔도 무방합니다. (정확한 것은 아니지만요.)
- InputVar: 문장이 담긴 변수를 써줍니다. 변수를 쓰는 칸이기 때문에 %기호를 쓰지 않습니다.
- Delimiters: 어떤 문자열로 구분할 지 적어줍니다.
OmitChars 매개변수는 설명드리지 않겠습니다. (잘 사용되지 않습니다.)
어렵지요. 예제를 보는 게 좋겠습니다.
예제
var := "동해물과 백두산이 마르고 닳도록"
Loop, Parse, var, %A_Space%
MsgBox, %A_LoopField%
복잡하게 보시지 말고, 부분 부분을 끊어서 봅시다.
- 첫 번째 줄: 여기는 이해가 되시죠? var 변수에 애국가 첫 소절을 담았네요.
- 두 번째 줄: 지금 배우고 있는 Loop, Parse구문입니다. var변수를 받는다는 뜻입니다. %A_Space%는 아래에 설명 드릴게요.
- 세 번째 줄: %A_LoopField%를 출력하네요. 이 또한 아래에서 설명드리겠습니다.
내장변수 두 개가 새로 나왔네요. A_Space는 "스페이스 바로 입력하는 공백"을 의미하고, A_LoopField는 Delimiters 매개변수로 구분된 문자열이 담기는 일종의 출력 변수입니다. FileReadLine의 OutputVar과 동일한 역할이지요.
즉, 변수 var의 내용을 공백으로 구분하면 각 부분이 A_LoopField에 차례로 담깁니다. 이를 메시지박스로 출력하는 스크립트입니다.
역시 직접 실행시켜보시면 감이 잡히실겁니다.
반복문이 진행될 때마다 A_LoopField의 값이 동해물과/백두산이/마르고/닳도록으로 변하는 모습을 볼 수 있습니다.
이번엔 지난 번에 배운 FileRead를 응용해보겠습니다.
FileRead, var, 애국가.txt
Loop, Parse, var, `n
MsgBox, %A_LoopField%
이스케이프 시퀀스는 문자열 취급한다고 했었죠? 개행을 기준으로 A_LoopField의 값이 변하겠네요.
애국가.txt엔 애국가 1절이 있습니다.
FileReadLine보다 깔끔하고 빠르게 모든 줄을 읽어올 수 있는 방법입니다. FileReadLine은 한 번 수행시마다 파일 전체를 읽어오므로 모든 줄을 반복문 + FileReadLine으로 읽어오면 (줄 수) * (파일 한 번 여는데 걸리는 시간) 만큼 소요되지만, 위와 같이 FileRead를 한 후 한 줄씩 Loop, Parse로 끊어서 읽으면 파일을 한 번만 읽으면 되죠.
꼭 공백이나 이스케이프 시퀀스가 아니더라도, 아래처럼 특정 문자열로 끊을 수도 있습니다.
var := "동해물과프백두산이프마르고프닳도록"
Loop, Parse, var, 프
MsgBox, %A_LoopField%
"프"라는 문자열로 끊어준 모습을 볼 수 있습니다.
사실 90%는 이 명령어를 `n을 기준으로 끊는 데 사용할 것입니다. (FileReadLine을 대체하기 위해서입니다.)
그러므로 두 번째 예제를 제일 잘 봐주시면, 나중에 분명 쓸 일이 있을겁니다.
까다로운 구문이니 많이 사용해보세요.
< 67. FileRead(Line) | 68. Loop, Parse | 69. 종합 프로그래밍 문제 Part.2 >