rand(life)

[vba] 텍스트 파일을 다룰 때 왜 freefile을 쓰는가? 본문

컴퓨터/엑셀

[vba] 텍스트 파일을 다룰 때 왜 freefile을 쓰는가?

flogsta 2017. 7. 26. 11:01

텍스트파일의 내용을 한 줄씩 읽어, 문자열을 탭을 기준으로 분리하여 배열변수에 넣기 위한 코드이다.

Dim str As String
Dim arr()
Dim ifn As Long

ifn = FreeFile
Open fname For Input As #ifn
    Do Until EOF(ifn)
        Line Input #ifn, str
        arr = Split(str, vbTab)
    Loop

여기서 Freefile이라는 함수를 사용해서 ifn에 숫자를 할당하는데, 왜 이런 작업을 해야하는가는 질문에 대한 대답이다.

답변1

쉬운 예를 들어 보죠.
철수, 영희가 있는데 좌석번호를 항상 철수에게는 1번, 영희에게는 2번을 준다고 하면 좌석이 비어있는 경우에는 아무런 문제가 발생하지 않습니다.
하지만, 다른 누군가가 1번 좌석을 점유한 상태라면 철수에게 1번을 줄 수 없겠죠.
이 경우 앞 번호부터 검색해서 빈 좌석 번호를 알려주는 장치가 있다면 철수나 영희에게 그 번호를 주면 간단히 해결이 되겠죠.

Open 문에서도 마찬가지입니다. 열려 있는 텍스트파일을 구분하여 컨트롤하기 위해 번호(#filenumber)를 부여하는데, Open 문이 한 번만 실행되는 상황에서는 문제가 없지만 여러 파일이 열리고 중간에 일부 파일은 닫히고 하는 상황이 있다보면 위 예와 같은 문제가 발생할 수 있습니다.

이 때 빈 번호를 반환하는 FreeFile 함수의 도움을 받으면 어떤 번호가 비어있는지 신경쓰지 않아도 자동 해결이 됩니다.
이런 기능을 하기 위해 FreeFile 함수를 사용합니다.


답변2

파일번호를 붙여야 하는 이유는 그냥 운영체제를 그렇게 만들었기 때문입니다.이런 파일번호가 없이 파일이름만으로 쓰기 가능하게 만들 수도 있었겠죠. 그러나

물리적 파일은 자기디스크 상에 여기저기 떨어진 상태로 존재합니다.
그래서 파일에 기록을 할려면 디스크 파일 색인 부분을 조회해서 파일이 어떤 상태인지 그때마다 읽어야겠죠. 이것은 비효율적입니다. 그래서 열려진 파일은 번호를 붙여서 운영체제에서 메모리에 파일 끝위치 주소 등의 상태를 미리 읽어둡니다. 그리고 쓰기 신호가 발생하면 즉시 동작할 수 있는거죠. 가방에 공책이 가득 들어 있고 당일 수업시간에 필기할 공책을 미리 꺼내서 번호를 붙여서 책상위에 얹어두는 것과 같습니다. 또 파일이 열려진 상태와 닫혀진 상태를 구분하는것은 쓰기 금지 등 파일의 보호에도 도움이 됩니다.