Một số kỹ thuật sử dụng để đọc file text

Một phần của tài liệu Tài liệu hướng dẫn thực tập tốt nghiệp Tin học xây dựng - Chương 1 pptx (Trang 43 - 44)

Phần này xin trình bày các kỹ thuật đọc các cấu trúc file text mà chúng tôi thường sử dụng. Phương pháp đơn giản nhất là sử dụng các lệnh Line Input để đọc từng dòng, sau đó sử dụng hàm split để tách dòng đó thành mảng các chuỗi ký tự.

Trong đoạn chương trình ví d ụ sau, chúng tôi ti ến hành đọc các thông s ố tọa độ của các Joint của hệ kết cấu trong file s2k của SAP2000 v8.

- Chương trình sẽ lần lượt đọc từng dòng của file s2k cho đến khi gặp dòng [TABLE: "JOINT COORDINATES"]

- Sau đó chương trình tiếp tục đọc từng dòng cho đến khi gặp dòng trống, với mỗi dòng vì dữ liệu được ghi theo t ừng cặp <Tên trường>=<Giá trị> nên chúng tôi s ử dụng hàm DocFile(s As String) để đọc từng cặp này.

- Hàm DocFile phân tích xâu ký t ự s thành nhiều cặp giá trị (sử dụng hàm split), với mỗi cặp giá trị lại sử dụng hàm split tách thành <Tên tr ường> và <Giá trị>, sau đó cặp dữ liệu này được đưa vào một Collection để xử lý.

Option Explicit

' Cấu trúc xâu s: " a=b c=d e=f... " ' Trả về Collection DocFile với

' DocFile(a) = b ' DocFile(c) = d ' DocFile(e) = f

Private Function DocFile(s As String) As Collection

Dim i As Integer

Dim vals As Variant, v2 As Variant

Set DocFile = New Collection ' Khởi tạo Collection

vals = Split(s, " ") ' Tách xâu s thành mảng

For i = LBound(vals) To UBound(vals)

If vals(i) <> "" Then ' Chỉ xử lý với phần tử không rỗng

v2 = Split(vals(i), "=") ' Tách cặp thành 2 phần

End If

Next End Function

' Ví dụ về dữ liệu '....

'TABLE: "JOINT COORDINATES"

' Joint=1 CoordSys=GLOBAL CoordType=Cartesian XorR=0 Y=0 Z=0 SpecialJt=No GlobalX=0 GlobalY=0 GlobalZ=0

' Joint=2 CoordSys=GLOBAL CoordType=Cartesian XorR=10 Y=0 Z=0 SpecialJt=No GlobalX=10 GlobalY=0 GlobalZ=0

'

'TABLE: "CONNECTIVITY - FRAME"

' Frame=1 JointI=1 JointJ=2 IsCurved=No Length=10 CentroidX=5 CentroidY=0 CentroidZ=0

'....

Private Sub Command1_Click() Dim FileNum As Integer

Dim s As String, val As Collection

Dim x As Double, y As Double, z As Double

FileNum = FreeFile

Open "c:\1.s2k" For Input As #FileNum

Do While Not EOF(FileNum) Line Input #FileNum, s

If s = "TABLE: ""JOINT COORDINATES""" Then

' Dòng nhận biết bảng tọa độ nút

Do While Not EOF(FileNum)

Line Input #FileNum, s ' Đọc dòng kế tiếp

If Trim(s) = "" Then Exit Do ' Dừng nếu gặp dòng trống

Set val = DocFile(s) ' Đọc dữ liệu vào Collection

MsgBox val("GlobalX") & " " & val("GlobalY") & " " & val("GlobalZ") ' Hiển thị các dữ liệu đọc được Loop End If Loop Close FileNum End Sub

Một phần của tài liệu Tài liệu hướng dẫn thực tập tốt nghiệp Tin học xây dựng - Chương 1 pptx (Trang 43 - 44)