티스토리 뷰

VBA

[Excel][VBA] 텍스트 파일 조작하기

어린왕자1234 2021. 11. 22. 22:39

※ 텍스트 파일 access방법

   Sequence Access(순차적 Access) : 각 문자나 데이터 전체 라인을 읽고 쓸 수 있다(일반적 방식)

   Random Access(임의 Access) : DB를 이용하는 프로그램 작성시 사용

   Binary Access(이진Access) : 바이트형식 읽고 쓰기에서 사용

 

▶ FileSystemObject 에 포함된 TextStream 개체를 사용해서 텍스트 파일 읽기쓰기 가능

 

■ Open 명령문을 이용해서 텍스트 파일 열기

    Open pathname For mode [ Access access ] [ lock ] As # ] filenumber [ Len = reclength ]

  pathname     파일경로를 포함한 파일이름
  mode     File Access Mode ( Append, Binary, Input, Output, Random) 지정 / 기본모드 :  Random access
    - 순차적 억세스
          Append : 파일을 읽거나 파일 끝에 데이터를 추가할 수 있는 순차적 억세스 모드
          Input : 읽기만 가능(쓰기 불가)
          Output : 파일 읽기쓰기 가능, 항상 새로운 파일이 생성됨(같은 이름 파일 존재시 기존파일 삭제)
    - 임의 억세스
          Random : reclength인수에 의해 지정된 단위로 데이터 읽기쓰기
    - 이진 억세스
          Binary  : 바이트 단위로 데이터 읽기쓰기
  access     수행할 작업 선택 ( Read, Write, Read Write)
  lock     다른 프로세스에 의해 열린 파일에 대해 제한된 작업을 지정
        (Shared, Lock Read, Lock Write, Lock Read Write)
  filenumber     1~511 파일 번호(VBA 함수 FreeFile를 이용해 다음으로 사용 가능한 파일 번호를 얻을 수 있다)
  reclength     <= 32,767 bytes ,  random access- 레코드 길이 / sequence access - 버퍼에 들어 있는 문자 수

 

■ 텍스트 파일 읽기

1. Open 명령문을 이용해 파일을 연다

2. Seek함수를 이용해 파일 내 위치를 지정한다(선택)

3. Input, Input#, Line Input# 명령문 중 하나를 사용하여 파일에서 데이터 읽기

4. Close 명령문을 이용해 파일을 닫는다

 

■ 데이터를 텍스트 파일에 쓰기

1. Open 명령문을 이용해 파일을 연다

2. Seek함수를 이용해 파일 내 위치를 지정한다(선택)

3. Write#, Print# 명령문 중 하나를 사용하여 파일에서 데이터 쓰기

4. Close 명령문을 이용해 파일을 닫는다

 

■ 파일 번호 알아내기

    FreeFile함수를 이용하여 유용한 다음파일 번호를 알 수 있다

    NextFile = FreeFile  

    Open "C:\Users\TaeIk\Documents\test.txt" For Input As NextFile    

 

■ 파일의 현재 위치를 알아내거나 설정하기

    순차억세스방법을 이용 시 위치를 알 필요가 없다.

    Seek함수 사용

    Seek [ # ] filenumber, position

Dim MaxSize, NextChar, MyChar

Open
"TESTFILE" For Input As #1 ' Open file for input.
MaxSize = LOF(1) ' Get size of file in bytes.

' The loop reads all characters starting from the last.
For NextChar = MaxSize To 1 Step -1
    Seek #
1, NextChar ' Set position.
    MyChar = Input(1, #1) ' Read character.
Next NextChar

Close #
1 ' Close file.

 

■ 파일 읽기 쓰기 명령문

Input : 지정된 개수만큼의 문자를 읽기

Input# : 열려 있는 파일에서 데이터를 읽어 쉼표(,)로 구분된 변수에 할당

Line Input# : 열려 있는 파일에서 하나의 행을 읽어 변수 String에 할당

Write# : 「쉼표( , )로 구분되고, 큰따옴표( " )로 묶인 데이터」를 순차적 억세스 파일에 쓴다.

           세미콜론( ; )으로 명령문을 끝내면 데이터 끝에 CrLf 삽입

           보통 Input# 명령문을 이용해 파일을 읽는다.

Print#  : 「탭 문자로 구분된 데이터」를 순차적 억세스 파일에 쓴다.

           세미콜론( ; )으로 명령문을 끝내면 데이터 끝에 CrLf 삽입 안됨.

           보통 Line Input# , Input 명령문을 이용해 파일을 읽는다.

test.txt
0.00MB
Input Input(number, [ # ]filenumber)  
Sub ReadFile()

    Dim MyChar
    Open "C:\Users\TaeIk\Documents\test.txt" For Input As #1    ' Open file.
    Do While Not EOF(1)    ' Loop until end of file.
        MyChar = Input(1, #1)    ' Get one character.
        Debug.Print MyChar    ' Print to the Immediate window.
    Loop
    Close #1    ' Close file.
End Sub
h
e
l
l
o
,
 
w
o
r
l
d
!
Input # Input #filenumber, varlist  
Sub ReadFile()

    Dim MyString, MyNumber
    Open "C:\Users\TaeIk\Documents\test.txt" For Input As #1  ' Open file for input.
    Do While Not EOF(1)    ' Loop until end of file.
        Input #1, MyString, MyNumber    ' Read data into two variables.
        Debug.Print MyString, MyNumber    ' Print data to the Immediate window.
    Loop
    Close #1    ' Close file.

End Sub
hello         world!
Line Input # Line Input #filenumber, varname  
Sub ReadFile()

    Dim TextLine
    Open "C:\Users\TaeIk\Documents\test.txt" For Input As #1    ' Open file.
    Do While Not EOF(1)    ' Loop until end of file.
        Line Input #1, TextLine ' Read line into variable.
        Debug.Print TextLine ' Print to the Immediate window.
    Loop
    Close #1    ' Close file.

End Sub
hello, world!