|
Open문으로 파일을 열고, Print, Write, Put문으로 출력하고, Input, Line input, Get문으로 입력하고, Close문으로 파일을 닫는 것은 전통적인 BASIC문법이다. 한편 비주얼베이직에서는 File개체를 이용하여 파일을 다룰 수 있는 다른 방법도 제공하고 있다. 지금부터 File개체를 이용하여 텍스트 파일을 다루는 방법에 대해 알아보자.
구분 |
기존의 방법 |
File개체를 이용하는 방법 |
---|
파일 열기 |
Open 파일이름 For 모드 As 파일번호 |
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(파일이름, 모드) |
파일 쓰기 |
Print #파일번호, 내용
Write #파일번호, 내용
Put #파일번호, 내용 |
f.Write 내용
f.WriteLine 내용
f.WriteBlankLines(숫자) |
파일 읽기 |
Input #파일번호, 변수목록
Line Input #파일번호, 변수목록
Get #파일번호, 변수목록 |
변수 = f.Read(숫자)
변수 = f.ReadLine
변수 = f.ReadALL |
파일 닫기 |
Close #파일번호 |
f.Close |
|
파일을 열기위해서는 먼저 다음과 같이 파일시스템 개체를 만들어야 합니다. 이 때 파일시스템개체명(fs)은 Varient형 변수를 사용합니다.
Set fs = CreateObject("Scripting.FileSystemObject")
|
보다 자세한 내용은 「Visual Basic 온라인 설명서」의 색인에서 'FileSystemObject 개체'라고 입력해서 검색해 보세요. |
이 프로젝트는 텍스트 파일을 다루고 있기 때문에 'OpenTextFile' 메소드를 이용해서 파일을 엽니다.
OpenTextFile메소드는 지정된 파일을 열어 파일을 읽거나 추가하는데 사용되는 TextStream 개체를 반환합니다. TextStream개체명(f)은 Varient형 변수를 사용합니다.
Set f = fs.OpenTextFile(파일이름, [입출력모드], [새파일작성여부], [형식])
|
구성 요소 |
설명 |
파일이름 |
필수. 열어 볼 파일을 식별하는 문자식 즉, 파일 경로를 포함하는 파일 이름 입니다. |
입출력모드 |
선택. 입력/출력 모드를 나타냅니다. 다음 상수 중 하나가 될 수 있습니다.
- ForReading = 1 읽기 모드
- ForWriting = 2 쓰기 모드
- ForAppending = 3 추가 모드
|
새 파일 작성 여부 |
선택. 지정된 파일이름이 존재하지 않을 경우 새 파일의 작성 여부를 나타내는 Boolean 값입니다. 값이 True이면 새 파일을 작성하고 그렇지 않다면 False입니다.
기본값은 False입니다. |
형식 |
선택. 세가지 Tristate 값 중의 하나가 열린 파일의 형식을 나타내는데 사용됩니다. 생략되면 파일은 ASCII 형식으로 열립니다.
- TristateUseDefault = -2 시스템 기본값으로 파일 열기
- TristateTrue = -1 Unicode로 파일 열기
- TristateFalse = 0 ASCII로 파일 열기
|
보다 자세한 내용은 「Visual Basic 온라인 설명서」의 색인에서 'FileSystemObject 개체' 라고 입력해서 검색해 보세요. |
TextStream개체에서 파일을 읽는 방법에 대해 하나씩 살펴보도록 하자.
우선 파일을 읽는 메소드는 Read, ReadLine, ReadAll 이 있다.
Read(숫자) 메소드
TextStream 파일에서 지정된 개수만큼의 문자를 읽고 그 문자열을 반환한다. 다음 예는 텍스트파일(c:\testfile.txt)에서 파일의 처음부터 끝까지 한 글자씩 읽어들이는 코드다.
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile( "c:\testfile.txt", 1, False) ' 읽기 모드로 파일 열기
Do While Not f.AtEndOfStream ' TextStream 파일의 끝이 아닌 동안
반환문자 = f.Read(1) '한 글자를 읽어 반환 문자에 저장
문장 = 문장 & 반환문자
Loop
f.close |
파일의 끝을 의미하는 속성이 AtEndOfStream 이다. 참고로 줄의 끝을 의미하는 속성은 AtEndOfLine 이다. 이 두 속성은 True 또는 False를 반환한다.
ReadLine 메소드
TextStream 파일에서 개행 문자(줄 바꿈 문자; 엔터)까지의(포함하지는 않고) 전체 줄을 읽고 그 문자열을 반환한다. Line Input # 문과 같다고 보면 된다. 이 메소드는 개행 문자는 리턴하지 않는다는 점을 주의해야 한다.
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile( "c:\testfile.txt", 1, False) ' 읽기 모드로 파일 열기
Do While Not f.AtEndOfStream ' TextStream 파일의 끝이 아닌 동안
반환문장 = f.ReadLine '한 줄을 읽어 반환 문장에 저장
문장 = 문장 & f.Line & " : " & 반환문장 & VbCrLf
Loop
f.close |
위 예제는 한 줄씩 읽어서 각 줄의 앞에 행번호를 삽입하여 출력하는 프로그램이다. 행 번호는 Line 속성을 통해 알 수 있다.
ReadALL 메소드
전체 TextStream 파일을 읽어 전체 문자열을 반환한다. Input()함수를 사용해서 파일을 읽는 방법과 유사하다고 볼 수 있다.
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile( "c:\testfile.txt", 1, False) ' 읽기 모드로 파일 열기
전체내용 = f.ReadAll '전체 파일일 읽어 전체내용에 저장
f.close |
|
TextStream개체에서 파일을 쓰는 방법에 대해 하나씩 살펴보도록 하자.
우선 파일을 쓰는 메소드는 Write, WriteLine, WriteBlankLine 이 있다.
Write 메소드
지정된 문자열들을 각 문자열 사이에 어떤 공간이나 문자 없이 TextStream 파일에 쓴다.
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile( "c:\testfile.txt", 2, False) ' 쓰기 모드로 파일 열기
f.Write 저장문자열
f.close |
WriteLine 메소드
지정한 문자열과 개행 문자를 TextStream 파일에 쓴다. Write와 다른 점은 파일에 쓸 때 개행문자(엔터)가 추가된다는 점이 다르다.
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile( "c:\testfile.txt", 2, False) ' 쓰기 모드로 파일 열기
f.WriteLine 저장문장
Loop
f.close |
WriteBlankLines(숫자) 메소드
TextStream 파일에 개행 문자(엔터)를 지정한 수만큼 쓴다.
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile( "c:\testfile.txt", 1, False) ' 읽기 모드로 파일 열기
f.WriteLines(5) '5개의 빈줄을 쓴다.
f.close |
|
열려 있는 TextStream 파일은 사용이 끝난 후 반드시 닫아야 합니다. TextStream개체명에 Close메소드를 사용하면 파일이 닫힙니다.
|
Sub SaveTextFile()
Const ForReading = 1 ' 읽기 모드
Const ForWriting = 2 ' 쓰기 모드
Const ForAppending = 3 ' 추가 모드
Const TristateUseDefault = -2 ' 시스템 기본값으로 파일 열기
Const TristateTrue = -1 ' Unicode로 파일 열기
Const TristateFalse = 0 ' ASCII로 파일 열기
Dim fs ' 파일시스템 개체
Dim f ' TextStream 개체
Dim 파일이름
On Error GOTO 에러핸들러
CommonDialog1.ShowSave
파일이름 = CommonDialog1.FileName
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(파일이름, ForWriting, True, TristateFalse)
f.Write Text1.Text
f.Close
에러핸들러:
End Sub
|
|
Sub ReadTextFile()
Const ForReading = 1 ' 읽기 모드
Const ForWriting = 2 ' 쓰기 모드
Const ForAppending = 3 ' 추가 모드
Const TristateUseDefault = -2 ' 시스템 기본값으로 파일 열기
Const TristateTrue = -1 ' Unicode로 파일 열기
Const TristateFalse = 0 ' ASCII로 파일 열기
Dim fs ' 파일시스템 개체
Dim f ' TextStream 개체
Dim 파일이름
On Error GOTO 에러핸들러
CommonDialog1.ShowOpen
파일이름 = CommonDialog1.FileName
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(파일이름, ForReading, False, TristateFalse)
Text1.Text = f.ReadALL
f.Close
에러핸들러:
End Sub
|
|
- Skip(숫자) 메소드
- TextStream 파일을 읽을 때 지정된 문자 수만큼 건너 뛴다.
- SkipLine 메소드
- TextStream 파일을 읽을 때 다음 줄을 건너 뛴다.
- AtEndOfLine 속성
- TextStream 의 줄 끝일 때 True, 아니면 False
- AtEndOfStream 속성
- TextStream 파일의 끝일 때 True, 아니면 False
- Line 속성
- TextStream 파일에서 현재 행 번호를 반환하는 읽기 전용 속성
- 파일이 처음으로 열리고 나서 아무 것도 기록되기 전에 Line속성 값은 1
- Column 속성
- TextStream 파일에서 현재 문자 위치의 열 번호를 반환하는 읽기 전용 속성
- 개행 문자(줄 바꿈, 엔터)가 기록되고 난 후 다른 문자가 기록되기 전에 Column속성 값은 1
|
이 외에도 FileSystemObject 개체에는 파일 복사, 삭제, 생성과 폴더 복사, 삭제, 생성 등등과 같이 파일을 다루는 여러 가지 유용한 메소드들이 많이 있으므로 「Visual Basic 온라인 설명서」를 참고하여 공부하기 바란다. |