프날 오토핫키 강좌
누르면 강좌 리스트가 나와요
프날 오토핫키 강좌

⚠ 이 강좌는 오토핫키 v1을 다룹니다

지금 보시는 강좌는 구버전 오토핫키(v1.1)를 다루고 있습니다. 따라서 본 강좌의 내용은 현재 최신 오토핫키 버전 (v2.0)과 호환되지 않습니다. 구버전의 정보가 필요한 것이 아니라면, 가능한 한 새로운 사이트에 작성한 v2 강좌(https://ahkv2.pnal.dev)를 봐주시길 바랍니다.

[프날 오토핫키] 67. FileRead(Line)

이번엔 텍스트 파일의 내용을 읽어보도록 하겠습니다.

 


 파일을 읽는 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초정도로 줄어듭니다.

 


| 67. FileRead(Line) |