0
 35   4   1
  View Articles

Name  
   손병목  (2002-02-19 07:50:01, Hit : 16432, Vote : 1369)
Homepage  
   http://www.itmembers.net
Subject  
   예제로 익히는 파일 시스템(1) - 순차 접근 파일
이번 강좌에서는 실제로 파일의 입출력에 관한 실습을 합니다.
비주얼베이직에서 다루고 있는 파일 시스템은 크게 순차 접근 방식, 임의 접근 방식, 이진 접근 방식 등으로 나눌 수 있습니다.
흔히 순차 액세스(Sequential Access), 랜덤 액세스(Random Access), 이진 액세스(Binary Access) 방식이라 말합니다.

순차 접근 파일은 대개 텍스트 파일의 입출력에 많이 사용되고, 그외에는 랜덤 액세스 파일이나 이진 액세스 파일이 주로 사용됩니다.
구체적인 실습을 통해 그 차이를 살펴보기로 하죠.


총 2회에 걸쳐 실습을 하겠는데, 이번 시간에는 순차 접근 방식으로 파일의 입출력 기능을 구현해 보기로 하고, 다음 시간에는 랜덤 액세스 파일 방식의 입출력 기능을 구현해 보기로 합니다.

일단 다음과 같이 따라하면서 프로그램을 먼저 만들어 보겠습니다.(프로그램을 일단 완성해서 구체적으로 실행하면서 실제 그 기능을 눈으로 확인한 다음 자세한 설명을 하는 것이 보다 쉽게 이해하실 것이라 생각합니다.)

  1. 비베를 실행합니다.

  2. 아래와 같이 화면을 구성합니다.

    • TextBox와 CommandButton 컨트롤만 사용하면 됩니다.
    • 다음과 같이 속성을 변경합니다.

    • TextBox의 속성 중 MultiLine 속성이 True로 되어 있어야 여러 줄의 텍스트를 작성할 수 있습니다. 스크롤 바는 세로 스크롤 바만 보이도록 설정했습니다.


  3. 아래와 같이 코드를 입력합니다.

    • cmdOutput, cmdInput, cmdAppend, cmdClear 개체(컨트롤)의 Click 이벤트에 대한 각각의 코드입니다.
    • 만약 위의 코드를 처음부터 끝까지 그대로 입력하지 않고, 개체 목록과 이벤트 목록에서 선택하여 코드를 입력하면 실제로는 위의 그림과 같은 순서대로 표시되지 않습니다. 설명을 편하게 하기 위해 순서를 조금 바꾸었습니다.
      만약 cmdOutput_Click()의 코드를 입력한 다음, cmdInput 개체의 Click 이벤트를 선택하면 cmdOutput_Click() 코드의 위쪽에 위치하게 됩니다.
    • 코드에 대한 자세한 설명은 일단 프로그램을 실행한 다음 하겠습니다.


  4. 프로그램을 실행합니다.

    • 먼저 임의의 문장을 입력하고 [저장하기]를 클릭합니다.
      아마도 비베가 설치된 폴더인 C:\Program Files\Microsoft Visual Studio\VB98 폴더에 "순차실습.txt" 파일이 생성되었을 것입니다.
      위의 코드에서 "순차파일.txt" 부분을 "c:\data\순차파일.txt"와 같이 바꾸면 파일이 저장되는 위치가 바뀌겠죠...
    • [화면 지우기]를 클릭해서 텍스트 박스의 내용을 지웁니다.
    • [불러오기]를 클릭하면 조금 전 저장했던 내용이 다시 보입니다.
    • [화면 지우기]를 클릭해서 텍스트 박스의 내용을 지웁니다.
    • 텍스트 박스에 임의로 내용을 다시 입력합니다.
    • 이번에는 [덧붙이기]를 클릭합니다.
    • [불러오기]를 클릭하면 처음 텍스트 파일에 저장했던 내용에 방금 추가했던 문장이 더해져서 보입니다.


이제 뭔가 감이 잡히죠?

몇가지 설명을 드리겠습니다. 아래 표를 볼까요.

Open과 Close는 어떤 파일 형식에든 다 사용하는 것이고 입력과 출력과 관련된 명령어가 조금 다르죠?
오늘과 다음 실습에 사용되는 명령어만 알아도 충분할 것입니다. 오늘은 Input#와 Print#를 사용했습니다.
다음 시간에는 Get, Put, Type…End Type을 사용할 것입니다.

  • Open 파일명 For [ Input | Output | Append ] As #번호
    • 위에서 [ ]로 둘러쌓인 부분은 하나만 선택해야 합니다. 예를 들어,
      Open "실습.txt" For Input As #1 과 같이 말입니다.
      Input은 입력용 파일, Ouput은 출력용, Append는 추가용으로 파일을 사용하겠다는 것입니다.
      이때 혼동하기 쉬운 것이 입력, 출력의 개념입니다. 여기서 말하는 입력은 '메모리'에 입력한다는 뜻으로 우리가 흔히 생각하는 디스크에 무언가를 입력해서 저장한다는 뜻이 아닙니다.
      따라서 우리가 흔히 생각하는 입력, 즉 디스크에 무언가를 쓰는 것이 여기서는 출력(Output)의 의미로 사용됩니다. 즉 메모리에 있는 내용을 디스크로 출력한다는 뜻입니다.
      따라서 비베 프로그래밍에서 말하는 입력은 데이터를 읽어온다는 뜻으로, 출력은 현재의 데이터를 쓴다는 뜻으로 이해를 해야 합니다.
    • #번호는 임의대로 부여하면 됩니다. 일종의 닉네임이죠.
      예를 들어 Open "실습.txt" For Input As #1으로 선언했다면 지금부터 "실습.txt" 파일을 지칭할 때는 #1으로 대신하겠다는 뜻입니다. 반드시 #1일 필요는 없습니다. #2, #3라고 부여해도 됩니다.


  • Close #번호
    Open으로 파일을 열어놓은 경우는 반드시 Close문을 사용해서 닫아야 합니다.
    Close에서 사용한 #번호Open …As #번호에서 사용한 파일 번호와 동일한 것을 사용해야 합니다.

  • Print #1, txtData.Text
    #1 파일, 즉 "순차실습.txt" 파일에 텍스트박스의 내용(txtData.Text)을 쓰라는 뜻입니다.

  • Do Until EOF(1) …Loop
    Do Until ~ Loop문은 반복문입니다. Until 뒤의 조건이 참일 때 계속해서 반복하라는 뜻입니다.
    EOF는 End Of File, 즉 파일의 끝을 의미합니다. EOF(1)의 1은 참을 의미합니다. 0이면 거짓이고.... 따라서 EOF(1)은 파일의 끝이 참인 것, 즉 "파일의 끝까지"라는 뜻입니다.
    파일을 열어 처음부터 파일의 끝까지 Do Until과 Loop 사이의 명령을 반복하라는 것이죠.

  • Input #1, InputData
    #1 파일("순차실습.txt")의 한 줄을 읽어서 InptuData라는 변수에 저장하라는 뜻입니다.
    아까 말했죠? Input은 메모리에 입력한다는 뜻이라고. 즉 파일을 열어 한 줄을 읽은 다음 메모리의 InputData라는 변수에 저장하라는 뜻입니다.

  • textFile = textFile + InputData + Chr(13) + Chr(10)
    읽어들인 문장을 계속해서 더하라(연결하라)는 뜻입니다. 여기서 Chr(13) + Chr(10)은 엔터키 역할을 합니다. 즉 다음 줄로 이동해서 다음 줄 처음으로 위치하도록 합니다.
    처음에 파일에서 한 줄의 문장을 읽어들이고, 다시 한줄을 읽어들여서 처음 읽어들인 문장과 연결을 하되 마지막에 Enter를 친 효과를 추가하라는 뜻입니다.
    이 부분, 이해될 때까지 다시 보고 또 보세요....이런 식의 코드를 많이 접하게 될 것입니다.
    예를 들어 1부터 10까지의 합을 구하는 로직이라면
       Sum = 0
       For i = 1 to 10

         Sum = Sum + i
       Next i
    와 같이 씁니다.
    여기서 Sum = Sum + i가 바로 이전의 값들을 누적하는 기능을 합니다.
    위에서 실습한 textFile = textFile + InputData와 어딘가 많이 닮았죠? 꼭 이해를 하셔야 합니다.


  • 위의 설명이 이해가 되었으면 나머지 코드는 그리 어렵지 않을 것입니다.
    꼭 이해를 하고 넘어가세요....


소스 파일 첨부합니다.


날씨가 갑자기 추워졌습니다. 감기 조심하시구요.
이상 화요일 이른 아침, 동주 아빠 손병목이었습니다.

Prev
   예제로 익히는 ActiveX컨트롤(6)-ProgressBar

손병목
Next
   예제로 익히는 ActiveX컨트롤(5)-MSFlexGrid

손병목


Copyright 1999-2021 Zeroboard / skin by Zetyx