Object TextStream

giaiphapvba

Administrator
Thành viên BQT
TextStream là đối tượng để hiển thị file text. Sau đây xin giới thiệu các phương thức và thuộc tính của đối tượng này.

Thuộc tính:
  • AtEndOfLine : Trả về giá trị con trỏ trong nội dung file text. Nó sẽ trả về là True nếu con trỏ đang ở ngay vị trí kết thúc file.
  • AtEndOfStream : Trả về giá trị con trỏ trong nội dung file text. Nó sẽ trả về là True nếu con trỏ đang ở ngay vị trí kết thúc file. Tuy nhiên nó chỉ dùng đối với file ở chế độ chỉ đọc không cho chỉnh sửa. Nếu không sẽ phát sinh lỗi.
  • Column : Từ vị trí đầu dòng cho tới vị trí con trỏ là ký tự thứ bao nhiêu.
  • Line : Vị trí con trỏ đang đứng là vị trí dòng thứ bao nhiêu.

Phương thức:
Close: Đóng file text
Read : Đọc ký tự được chỉ định của file text
ReadAll: Đọc toàn bộ ký tự có trong file text
ReadLine: Đọc ký tự một dòng trong file text
Skip : Bỏ qua ký tự được chỉ định trong file text, không cho đọc.
SkipLine: Bỏ qua một dòng trong file text.
Write: Viết ký tự được chỉ định vào file text.
WriteBlankLines : Xuống dòng
WriteLine : Viết một dòng ký tự vào file text.

Topic này sẽ còn được cập nhật và có thể chỉnh sửa khi phát hiện có sai sót. Bản dịch này chỉ là thuần dịch mà chưa có kiểm chứng của người dịch, xin lưu ý.
Tham khảo:
 

tuhocvba

Administrator
Thành viên BQT
AtEndOfLine : Trả về giá trị con trỏ trong nội dung file text. Nó sẽ trả về là True nếu con trỏ đang ở dòng cuối của file.
Mã:
Sub test72()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Work\Sample.txt Kiem tra da duoc doc toi dong cuoi cua file hay chua
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .ReadLine
        If .AtEndOfLine Then
            MsgBox "Da doc toi cuoi file"
        Else
            MsgBox "Chua doc toi cuoi file"
        End If
        .Close
    End With
    Set FSO = Nothing
End Sub
Bạn cần đăng nhập để thấy đính kèm

Nguồn tham khảo và dịch:
 

Euler

Mod
Thành viên BQT
AtEndOfStream : Trả về vị trí của con trỏ trong file ở chế độ đọc (không ghi hay chỉnh sửa nội dung). Nó sẽ trả về giá trị True nếu con trỏ đang ở vị trí cuối của file.
Thuộc tính này chỉ dùng cho chế độ đọc (không chỉnh sửa hay ghi nội dung). Ngoài chế độ này thì sẽ xảy ra lỗi.
Mã:
Sub test73()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Work\Sample.txt : Vị trí con trỏ ở cuối file hay không?
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .ReadLine
        If .AtEndOfStream Then
            MsgBox "Da doc het file" 'Con trỏ chưa ở cuối file'
        Else
            MsgBox "Chua doc het file" 'Con trỏ đã ở cuối file'
        End If
        .Close
    End With
    Set FSO = Nothing
End Sub
Nguồn:
 

tuhocvba

Administrator
Thành viên BQT
Column : Nó sẽ trả về kí tự số bao nhiêu, là vị trí đọc hay ghi vào file kể từ chữ cái đầu của dòng.
Mã:
Sub test74()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Hiển thị vị trí đọc tiếp theo
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .Read(3)
        MsgBox "Tiep theo la ki tu thu " & .Column & " se duoc doc."
        .Close
    End With
    Set FSO = Nothing
End Sub
 

giaiphapvba

Administrator
Thành viên BQT
Line: Trong file ở chế độ chỉ đọc, từ vị trí của con trỏ, nó sẽ trả về số thứ tự dòng thứ bao nhiêu trong file.
Mã:
Sub test75()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Hien thi vi tri tiep theo
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .ReadLine
        MsgBox "Tiep theo, dong thu " & .Line & " se duoc doc"
        .Close
    End With
    Set FSO = Nothing
End Sub
Nguồn:
 

vanthanhVBA

Thành viên
Phương thức Close:
Cấu trúc: TextStream.Close
Mục đích: File txt đang mở sẽ được đóng.
Mã:
Sub test76()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .ReadLine
        MsgBox "Tiep theo, dong " & .Line & " se duoc doc"
        ''Dong File
        .Close
    End With
    Set FSO = Nothing
End Sub
Nguồn:
 

Yukino Ichikawa

Thành viên
Phương thức Read:
Cấu trúc: TextStream.Read(characters)
Mục đích: Đọc nội dung file txt.
Tham số characters là số ký tự mà bạn muốn đọc.
Tôi có file txt có nội dung như sau:
Nội dung file txt:
1234================================================
ABC---------------
Chương trình đọc file txt như sau:
Mã:
Sub test77()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Doc 2 ky tu dau tien cua file C:\Work\Sample.txt
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .Read(2)
        MsgBox buf 'ket qua hien thi la: 12'
        .Close
    End With
    Set FSO = Nothing
End Sub
Nguồn tham khảo:
 

vanthanhVBA

Thành viên
Phương thức ReadAll:
Cấu trúc: TextStream.ReadAll
Nó sẽ trả về nội dung của toàn bộ file txt.
Mã:
Sub test78()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Doc toan bo noi dung cua file C:\Work\Sample.txt
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .ReadAll
        MsgBox buf 'Chu y: Co the khong hien thi duoc het noi dung cua buf qua ham Msgbox neu buf qua dai'
        .Close
    End With
    Set FSO = Nothing
End Sub
Nguồn tham khảo:

Phương thức ReadLine:
Cấu trúc: TextStream.ReadLine
Nó sẽ trả về nội dung của một dòng dữ liệu trong file txt. Do đó nếu nội dung file txt không chứa ký tự xuống dòng hay kết thúc dòng thì không thể đọc được.
Mã:
Sub test79()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Doc noi dung dong dau tien cua file C:\Work\Sample.txt
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .ReadLine
        .Close
    End With
    MsgBox buf
    Set FSO = Nothing
End Sub
Nguồn:
Một ví dụ khác:
Mã:
Sub Sample_ReadLine()
 
    Dim fso As New FileSystemObject
    Dim f As TextStream
    Dim str As String
    
    Set f = fso.OpenTextFile("C:\Documents\mydata5\test01.txt")
    
    Do Until f.AtEndOfLine
                
        str = str & f.ReadLine & vbCrLf
 
    Loop
    
    f.Close
    
    MsgBox str
 
End Sub
Nguồn :
 

Yukino Ichikawa

Thành viên
Phương thức Skip:
Cấu trúc: TextStream.Skip(characters)
Nó sẽ loại bỏ các ký tự do bạn chỉ định trong khi đọc dữ liệu.
Ví dụ:
Tôi có file txt nội dung như sau:
Mã:
1234567890
Dưới đây tôi sẽ đọc 2 ký tự đầu của file text, sau đó bỏ qua 3 ký tự tiếp theo, rồi đọc tiếp 4 ký tự tiếp theo:
Mã:
Sub test80()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Lay 2 ky tu dau tien、sau do lay 4 ky tu ke tu ky tu thu 6 tro di
    With FSO.GetFile("D:\VBA\ReadMe.txt").OpenAsTextStream
        buf = .Read(2)
        .Skip 3 'Loai bo 3 ky tu: ky tu thu 3, 4,5
        buf = buf & .Read(4)
       .Close
    End With
    MsgBox buf 'Ket qua la 126789
    Set FSO = Nothing
End Sub
Nguồn tham khảo:
 

vanthanhVBA

Thành viên
Phương thức SkipLine:
Cấu trúc: TextStream.SkipLine
Dòng dữ liệu bị Skip sẽ không được đọc.
Ví dụ dưới đây, ta sẽ đọc dữ liệu dòng 1 và dòng 3 và cho hiển thị thông qua hàm Msgbox.
Mã:
Sub test81()
    Dim FSO As Object, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Doc du lieu dong 1 va dong 3:
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream
        buf = .ReadLine & vbCrLf
        .SkipLine
        buf = buf & .ReadLine
        .Close
    End With
    MsgBox buf
    Set FSO = Nothing
End Sub
Nội dung file text của tôi như sau:
Mã:
dulieudong1
dulieudong2
dulieudong3
dulieudong4
Kết quả chạy macro hiện ra thông báo là:
Mã:
dulieudong1
dulieudong3
Nguồn:
 

Yukino Ichikawa

Thành viên
Phương thức Write:
Cấu trúc: TextStream.Write(string)
Phương thức này sẽ ghi nội dung vào file text. Sau khi ghi thì không xuống dòng.
Ví dụ dưới đây, các ký tự "tuhocvba.net" và "forum VBA" sẽ được ghi trong cùng một dòng.
Mã:
Sub test82()
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream(8)
        .Write "tuhocvba.net"
        .Write "forum VBA"
        .Close
    End With
    Set FSO = Nothing
End Sub
 
Top