⚠ 이 강좌는 오토핫키 v1을 다룹니다
지금 보시는 강좌는 구버전 오토핫키(v1.1)를 다루고 있습니다. 따라서 본 강좌의 내용은 현재 최신 오토핫키 버전 (v2.0)과 호환되지 않습니다. 구버전의 정보가 필요한 것이 아니라면, 가능한 한 새로운 사이트에 작성한 v2 강좌(https://ahkv2.pnal.dev)를 봐주시길 바랍니다.
이번엔 텍스트 파일의 내용을 읽어보도록 하겠습니다.
파일을 읽는 FileRead
FileRead 명령어는 파일의 내용을 읽어와서, 출력 변수에 담아주는 명령어입니다.
FileRead, OutputVar, Filename
- OutputVar: 파일의 내용이 담길 출력 변수입니다. 이런거 많이 써봤죠?
- FileName: 읽어올 파일의 경로입니다.
스크립트와 같은 위치에 "67강.txt" 텍스트 파일을 만들고 내용을 아래처럼 작성한 후, 저장을 해주세요.
매개변수만 보고도 감이 오지 않나요? FileName 매개변수에 쓴 파일을 찾아서 그 내용을 OutputVar에 담아줍니다.
아래처럼 써서 확인해봅시다.
FileRead, var, 67강.txt
MsgBox, %var%
텍스트 파일의 내용이 변수 var에 담겼습니다.
어렵지 않죠?
너무 짧으니 하나 더 첨언해보자면, 해당 명령어를 수행 후엔 ErrorLevel 내장 변수의 값 또한 변경됩니다.
[ErrorLevel에 따른 FileRead 성공 여부]
0: 정상적으로 읽어온 상태
1: 파일이 없는 상태
2: 읽기 권한이 없거나 잠겨있는 상태
3: 메모리 부족
한 줄만 읽어주는 FileReadLine
FileRead와 다르게, 텍스트 파일의 특정 번째 줄만 읽어주는 명령어로 FileReadLine이 있습니다.
FileReadLine, OutputVar, Filename, LineNum
- OutputVar: 특정 줄의 내용이 담길 출력 변수입니다.
- FileName: 읽어올 텍스트 파일의 경로입니다.
- LineNum: 몇 번째 줄을 읽어올 지 정할 수 있습니다.
아까 작성했던 67강.txt를 가지고 예제를 만들어보겠습니다.
FileReadLine, var, 67강.txt, 1
MsgBox, %var%
텍스트 파일의 첫 줄이 변수 var에 담긴 것을 확인할 수 있습니다.
FileReadLine, var, 67강.txt, 4
MsgBox, %var%
네 번째 줄 또한 정상적으로 담깁니다.
아래처럼 응용하면 한 줄씩 전체를 읽어올 수도 있겠네요.
Loop
{
FileReadLine, var, 67강.txt, %A_index%
MsgBox, %var%
}
그런데, 실행시켜보면 문제가 있습니다. 파일의 마지막 줄이 끝난 후에도 계속 반복문이 진행됩니다. 파일의 줄이 몇 줄까지인지 모르면 반복문에 Count 매개변수를 써 줄 수도 없는데 말이지요.
그래서 FileReadLine을 반복문으로 돌릴 땐 ErrorLevel을 이용합니다.
[ErrorLevel에 따른 FileReadLine 성공 여부]
0: 성공.
1: 해당하는 줄을 읽을 수 없음.
파일의 마지막 줄보다 뒷 부분을 읽어올 수는 없으므로 ErrorLevel이 1일때 반복문을 탈출하도록 만들어주면 되겠네요.
Loop
{
FileReadLine, var, 67강.txt, %A_index%
if (ErrorLevel = 1)
break
MsgBox, %var%
}
좋습니다. 정상적으로 모든 내용을 한 줄씩 읽어온 다음에 종료되는 것을 볼 수 있습니다.
그렇지만 이렇게 Loop 안에 FileReadLine을 넣는 것은 권장하지 않습니다. 텍스트 파일의 줄 수가 많을수록 읽어오는데 오랜 시간이 걸리기 때문입니다.
제가 테스트 했을 때는 3000줄짜리 텍스트 파일을 FileReadLine으로 읽으니 3.688초가 걸리네요.
그렇기 때문에 텍스트 파일을 한 줄씩 끊어 읽을려면 다음 강에서 배울 Loop, Parse구문을 사용하는 것이 좋습니다.
테스트 해보니 이 방법을 쓰면 3.7초 나오던 것이 0.14초정도로 줄어듭니다.
< 66. FileAppend/Delete | 67. FileRead(Line) | 68. Loop, Parse >