본문 바로가기
Microsoft Scripting Runtime

TextStream 개체

2023. 8. 14.

이 글은 도움말을 번역한 글입니다.

TextStream 개체

파일을 순차적으로 액세스할 수 있게 하는 개체입니다.

Syntax
TextStream. { property | method }

속성 및 메서드 인수는 TextStream 개체와 연결된 속성 및 메서드 중 하나일 수 있습니다. 실제 사용에서 TextStreamFileSystemObject에서 반환된 TextStream 개체를 나타내는 변수 자리 표시자로 대체됩니다.

비고

아래 코드는 FileSystemObjectCreateTextFile 메서드에서 반환한 TextStream 개체입니다.

Sub CreateAndWriteToFile()
    Dim fs As Object
    Dim a As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("D:\testfile.txt", True)
    a.WriteLine "This is a test."
    a.Close
End Sub

Sub Main()
    Call CreateAndWriteToFile
End Sub

WriteLineClose 메서드는 TextStream 개체의 두 메서드입니다.

속성

AtEndOfLine property

파일 포인터가 TextStream 파일의 줄 끝 표식에 바로 접하여 있으면 True를 반환합니다. 그렇지 않으면 False를 반환하는 읽기 전용 속성입니다.

Syntax
object.AtEndOfLine

object는 항상 TextStream 개체의 이름입니다.

AtEndOfLine 속성은 읽기 전용으로 열린 TextStream 파일에만 적용되며, 그 밖의 경우에는 오류가 발생합니다.

아래 코드는 AtEndOfLine 속성의 사용법을 보여줍니다.

Sub ReadFileLinesAndDisplay()
    Dim fs As Object
    Dim a As Object
    Dim retstring As String

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.OpenTextFile("D:\testfile.txt", ForReading, False)

    Do While Not a.AtEndOfStream
        retstring = ""

        ' 한 줄의 끝까지 문자를 읽어옴
        Do While Not a.AtEndOfLine
            retstring = retstring & a.Read(1)
        Loop

        ' 결과를 메시지 박스로 표시
        MsgBox "현재 줄 내용: " & retstring

        a.SkipLine    ' 다음 줄로 이동

    Loop

    a.Close
End Sub

AtEndOfStream property

파일 포인터가 TextStream 파일 끝에 있으면 True를, 그렇지 않으면 False를 반환하는 읽기 전용 속성입니다.

Syntax
object.AtEndOfStream

object는 항상 TextStream 개체의 이름입니다.

비고

AtEndOfStream 속성은 읽기 전용으로 열린 TextStream 파일에만 적용되며, 그 밖의 경우에는 오류가 발생합니다.

아래 코드는 AtEndOfStream 속성의 사용법을 보여줍니다.

Sub ReadFileLinesAndDisplay()
    Dim fs As Object
    Dim a As Object
    Dim line As String

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.OpenTextFile("D:\testfile.txt", ForReading, False)

    Do While Not a.AtEndOfStream
        line = a.ReadLine    ' 한 줄을 읽어옴

        ' 여기서 line을 활용하여 필요한 작업을 수행합니다.
        ' 예: 결과를 처리하는 다른 코드 추가

        ' 결과를 메시지 박스로 표시
        MsgBox "현재 줄 내용: " & line
    Loop

    a.Close
End Sub

Column property

TextStream 파일에서 현재 문자 위치의 열 번호를 반환하는 읽기 전용 속성입니다.

Syntax
object.Column

object는 항상 TextStream 개체의 이름입니다.

비고

줄 바꿈 문자를 썼지만 다른 문자를 쓰기 이전이면 Column은 1이 됩니다.

아래 예제는 Column 속성의 사용법을 보여줍니다.

Sub ReadFileAndDisplayColumns()
    Dim fso As Object
    Dim myFile As Object
    Dim filePath As String
    Dim char As String
    Dim currentColumn As Long

    filePath = "D:\testfile.txt"

    ' FileSystemObject 생성
    Set fso = CreateObject("Scripting.FileSystemObject")

    ' 파일 열기 (1: 읽기 모드, -2: 시스템 기본 인코딩)
    Set myFile = fso.OpenTextFile(filePath, 1, False, -2)
    'Set myFile = fso.OpenTextFile(filePath, ForReading, False, TristateUseDefault)

    ' 파일 내용을 읽고 현재 열(column) 번호 출력
    Do While Not myFile.AtEndOfStream
        char = myFile.Read(1)
        currentColumn = myFile.Column
        Debug.Print "문자: " & char & vbTab & "열: " & currentColumn
    Loop

    ' 파일 닫기
    myFile.Close

    ' 개체 해제
    Set myFile = Nothing
    Set fso = Nothing
End Sub

Line property

TextStream 파일의 현재 줄 번호를 반환하는 읽기 전용 속성입니다.

Syntax
object.Line

object는 항상 TextStream 개체의 이름입니다.

비고

파일을 처음 연 다음 전혀 쓰지 않았으면 Line은 1이 됩니다.

아래 예제는 Line 속성 사용법을 보여줍니다.

Sub ReadFileLinesAndDisplayWithLine()
    Dim fso As Object
    Dim myFile As Object
    Dim filePath As String
    Dim textLine As String
    Dim currentLine As Long

    ' 경로를 입력해 주세요.
    filePath = "D:\testfile.txt"

    ' FileSystemObject 생성
    Set fso = CreateObject("Scripting.FileSystemObject")

    ' 파일 열기 (1: 읽기 모드, -2: 시스템 기본 인코딩)
    Set myFile = fso.OpenTextFile(filePath, 1, False, -2)
    ''Set myFile = fso.OpenTextFile(filePath, ForReading, False, TristateUseDefault)

    ' 파일 내용을 한 라인씩 읽고 현재 행(line) 번호 출력
    Do While Not myFile.AtEndOfStream
        textLine = myFile.ReadLine
        currentLine = myFile.line
        Debug.Print "행: " & currentLine & vbTab & "내용: " & textLine
    Loop

    ' 파일 닫기
    myFile.Close

    ' 개체 해제
    Set myFile = Nothing
    Set fso = Nothing
End Sub

메서드

Close method

열려 있는 TextStream 파일을 닫습니다.

Syntax
object.Close

object는 항상 TextStream 개체의 이름입니다.

비고

아래 예제에서 Close 메서드는 열려 있는 TextStream 파일을 닫습니다.

Function ReadFileAndClose(filePath As String) As String
    Dim fs As Object
    Dim a As Object
    Dim content As String
    
    ' FileSystemObject 생성
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    ' 파일 열기 (1: 읽기 모드, -2: 시스템 기본 인코딩)
    Set a = fs.OpenTextFile(filePath, 1, False, -2)
    
    ' 파일 내용 읽기
    Do While Not a.AtEndOfStream
        content = content & a.ReadLine & vbCrLf
    Loop
    
    ' TextStream 닫기
    a.Close
    
    ' 개체 해제
    Set a = Nothing
    Set fs = Nothing
    
    ReadFileAndClose = content
End Function
Sub ExampleUsage()
    Dim fileContent As String
    
    fileContent = ReadFileAndClose("D:\testfile.txt")
    MsgBox fileContent
End Sub

Read method

TextStream 파일에서 지정한 수의 문자를 읽은 다음 그 결과인 문자열을 반환합니다.

Syntax
object.Read (characters)

object : 필수적인 요소. 항상 TextStream 개체의 이름입니다.

characters : 필수적인 요소. 해당 파일에서 읽어 올 문자 개수입니다.

비고

아래 예제에서는 한 파일에서 백 개의 문자를 읽고 결과 문자열을 반환하는 Read 메서드 사용법을 보여줍니다.

Function ReadTextFile(filePath As String, numChars As Long) As String
    Dim fs As Object
    Dim a As Object
    Dim content As String
    
    ' FileSystemObject 생성
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    ' 파일 열기 (1: 읽기 모드, -2: 시스템 기본 인코딩)
    Set a = fs.OpenTextFile(filePath, ForReading, False, -2)
    
    ' 파일 내용 읽기
    content = a.Read(numChars)
    
    ' TextStream 닫기
    a.Close
    
    ' 개체 해제
    Set a = Nothing
    Set fs = Nothing
    
    ReadTextFile = content
End Function

Sub ExampleUsage()
    Dim fileContent As String
    
    fileContent = ReadTextFile("D:\testfile.txt", 100) ' 100글자 읽기
    MsgBox fileContent
End Sub

ReadAll method

전체 TextStream 파일을 읽은 다음 결과인 문자열을 반환합니다.

Syntax
object.ReadAll

object는 항상 TextStream 개체의 이름입니다.

비고

큰 파일에 ReadAll 메서드를 사용하면 메모리 리소스를 낭비하게 되므로, 한 줄씩 파일을 읽어 오는 다른 기법을 사용하여 파일을 입력해야 합니다.

Function ReadEntireFile(filePath As String) As String
    Dim fs As Object
    Dim a As Object
    Dim content As String
    
    ' FileSystemObject 생성
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    ' 파일 열기 (1: 읽기 모드, -2: 시스템 기본 인코딩)
    Set a = fs.OpenTextFile(filePath, 1, False, -2)
    
    ' 파일 내용 읽기
    content = a.ReadAll
    
    ' TextStream 닫기
    a.Close
    
    ' 개체 해제
    Set a = Nothing
    Set fs = Nothing
    
    ReadEntireFile = content
End Function

Sub ExampleUsage()
    Dim fileContent As String
    
    fileContent = ReadEntireFile("D:\testfile.txt")
    MsgBox fileContent
End Sub

ReadLine method

TextStream 파일에서 줄 바꿈 문자를 제외한 한 줄 전체를 읽은 다음 결과 문자열을 반환합니다.

Syntax
object.ReadLine

object 인수는 항상 TextStream 개체의 이름입니다.

비고

아래 예제에서는 TextStream 파일에서 한 줄을 읽고 문자열을 반환하는 ReadLine 메서드 사용법을 보여줍니다.

Function ReadFileLine(filePath As String, lineNumber As Long) As String
    Dim fs As Object
    Dim a As Object
    Dim currentLine As Long
    Dim lineContent As String

    ' FileSystemObject 생성
    Set fs = CreateObject("Scripting.FileSystemObject")

    ' 파일 열기 (1: 읽기 모드, -2: 시스템 기본 인코딩)
    Set a = fs.OpenTextFile(filePath, 1, False, -2)

    ' 파일 내용 읽기
    currentLine = 1
    Do While Not a.AtEndOfStream
        If currentLine = lineNumber Then
            lineContent = a.ReadLine
            Exit Do
        Else
        End If
        currentLine = currentLine + 1
        a.SkipLine    ' 다음 줄로 이동
    Loop

    ' TextStream 닫기
    a.Close

    ' 개체 해제
    Set a = Nothing
    Set fs = Nothing

    ReadFileLine = lineContent
End Function
Sub ExampleUsage()
    Dim lineContent As String

    lineContent = ReadFileLine("D:\testfile.txt", 3)    ' 3번째 줄 읽기
    MsgBox lineContent
End Sub

Skip method

TextStream 파일을 읽을 때 지정한 문자 수만큼 건너 뜁니다.

Syntax
object.Skip (characters)

object : 필수적인 요소. 항상 TextStream 개체의 이름입니다.

characters : 파일을 읽을 때 건너 뛸 문자의 개수입니다.

비고

건너 뛴 문자는 폐기됩니다.

아래 예제에서 Skip 메서드는 텍스트 파일을 읽기 전에 처음 10 개의 문자를 건너 뜁니다.

Sub Main()
    Dim filePath As String
    Dim skipChars As Long
    
    filePath = "D:\testfile.txt" ' 파일 경로
    skipChars = 10 ' 건너뛸 문자 수

    Call SkipCharacters(filePath, skipChars)
End Sub

Function SkipCharacters(filePath As String, skipChars As Long)
    Dim fso As New FileSystemObject
    Dim txtStream As TextStream
    Dim readChars As String
    
    If fso.FileExists(filePath) Then
        Set txtStream = fso.OpenTextFile(filePath, 1, False, -2)
        txtStream.Skip skipChars
        readChars = txtStream.ReadAll
        MsgBox "건너뛴 후 읽은 내용: " & Chr(10) & readChars
        txtStream.Close
    Else
        MsgBox "파일을 찾을 수 없습니다. 경로를 확인해주세요."
    End If
    Set txtStream = Nothing
    Set fso = Nothing
End Function

SkipLine method

TextStream 파일을 읽을 때 다음 줄로 건너 뜁니다.

Syntax
object.SkipLine

object는 항상 TextStream 개체의 이름입니다.

비고

한 줄을 건너 뛴다는 말은 다음에 나오는 줄 바꿈 문자를 포함하여 그 줄의 모든 문자를 읽어 들인 다음 버린다는 뜻입니다. 파일을 읽을 수 없으면 오류가 일어납니다.

아래 예제는 SkipLine 메서드 사용법을 보여줍니다.

Sub Main()
    Dim filePath As String
    Dim skipLines As Long
    
    filePath = "D:\testfile.txt" ' 여기에 원하는 파일 경로를 입력하세요.
    skipLines = 3 ' 건너뛸 줄 수를 입력하세요.

    Call SkipNumberOfLines(filePath, skipLines)
End Sub

Function SkipNumberOfLines(filePath As String, skipLines As Long)
    Dim fso As New FileSystemObject
    Dim txtStream As TextStream
    Dim currentLine As String
    Dim readLines As String
    
    If fso.FileExists(filePath) Then
        Set txtStream = fso.OpenTextFile(filePath, 1, False, -2)
        
        'skipLines 만큼 줄을 건너뛰기
        Dim i As Long
        For i = 1 To skipLines
            If Not txtStream.AtEndOfStream Then
                txtStream.SkipLine
            Else
                Exit For
            End If
        Next i
        
        ' 건너뛴 후 남은 내용 읽기
        Do Until txtStream.AtEndOfStream
            currentLine = txtStream.ReadLine
            readLines = readLines & currentLine & Chr(10)
        Loop
        
        MsgBox "건너뛴 후 읽은 내용: " & Chr(10) & readLines
        txtStream.Close
    Else
        MsgBox "파일을 찾을 수 없습니다. 경로를 확인해주세요."
    End If
    Set txtStream = Nothing
    Set fso = Nothing
End Function

Write method

TextStream 파일에 지정한 문자열을 작성합니다.

Syntax
object.Write (string)

object : 필수적인 요소. 항상 TextStream 개체의 이름입니다.

string : 필수적인 요소. 파일에 작성할 텍스트입니다.

각 문자열 사이의 공백이나 문자없이 지정한 문자열을 작성합니다. WriteLine 메서드를 사용하여 줄 바꿈 문자나 줄 바꿈 문자로 끝나는 문자열을 작성합니다.

아래 예제는 Write 메서드 사용법을 보여줍니다.

Sub WriteToFile(filePath As String, content As String)
    Dim fs As Object
    Dim a As Object
    
    ' FileSystemObject 생성
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    ' 파일 열기 (2: 쓰기 모드, -2: 시스템 기본 인코딩)
    Set a = fs.OpenTextFile(filePath, ForWriting, True, -2)
    
    ' 내용 쓰기
    a.Write content
    
    ' TextStream 닫기
    a.Close
    
    ' 개체 해제
    Set a = Nothing
    Set fs = Nothing
End Sub

Sub ExampleUsage()
    WriteToFile "D:\output.txt", "Hello, world!" ' 파일에 내용 쓰기
End Sub

WriteBlankLines method

지정한 수만큼 TextStream 파일에 줄 바꿈 문자를 작성합니다.

Syntax
object.WriteBlankLines (lines)

object : 필수적인 요소. 항상 TextStream 개체의 이름입니다.

lines : 필수적인 요소. 파일에 쓸 줄 바꿈 문자의 수입니다.

비고

아래 예제는 WriteBlankLines 메서드 사용법을 보여줍니다.

Sub Main()
    Dim filePath As String
    Dim blankLines As Long
    
    filePath = "D:\example.txt" ' 파일 경로
    blankLines = 5 ' 쓰고 싶은 공백 라인 수
    
    WriteBlankLinesToFile filePath, blankLines
End Sub

Sub WriteBlankLinesToFile(filePath As String, blankLines As Long)
    Dim fs As FileSystemObject
    Dim ts As TextStream
    
    ' FileSystemObject 생성
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    ' 파일 열기 또는 생성 (8: 추가 모드)
    Set ts = fs.OpenTextFile(filePath, ForAppending, True)

    ' 지정된 공백 라인 개수 작성
    ts.WriteBlankLines blankLines

    ' TextStream 닫기
    ts.Close

    ' 개체 해제
    Set ts = Nothing
    Set fs = Nothing
End Sub

WriteLine

지정한 문자열과 줄 바꿈 문자를 TextStream 파일에 작성합니다.

Syntax
object.WriteLine ([ string ])

object : 필수적인 요소. 항상 TextStream 개체의 이름입니다.

string : 선택적인 요소. 파일에 쓸 텍스트입니다. 생략하면 줄 바꿈 문자를 파일에 작성합니다.

비고

아래 예제는 WriteLine 메서드 사용법을 보여줍니다.

Sub Main()
    Dim filePath As String
    Dim content As String
    
    filePath = "D:\example.txt" ' 파일 경로
    content = "Hello, world!"   ' 작성하려는 텍스트
    
    WriteLineToFile filePath, content
End Sub

Sub WriteLineToFile(filePath As String, content As String)
    Dim fs As FileSystemObject
    Dim ts As TextStream
    
    ' FileSystemObject 생성
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    ' 파일 열기 또는 생성 (2: 쓰기 모드)
    Set ts = fs.OpenTextFile(filePath, ForWriting, True)
    
    ' 텍스트 작성 (새 줄에)
    ts.WriteLine content
    
    ' TextStream 닫기
    ts.Close
    
    ' 개체 해제
    Set ts = Nothing
    Set fs = Nothing
End Sub

'Microsoft Scripting Runtime' 카테고리의 다른 글

File 개체  (0) 2023.08.13
Files 컬렉션  (0) 2023.08.13
Folder 개체  (0) 2023.08.10
Folders 컬렉션  (0) 2023.08.10
Drive 개체  (0) 2023.08.10