Class dùng cho Fixed Length Text String
Có lẽ lập trình với Text String là công việc bạn thường làm nhất. Ðó là lý do tại sao
hơn mười năm trước Microsoft Basic của Bill Gates rất thịnh hành vì nó có những
String Functions rất tiện dụng như Left, Right và Mid.
Có nhiều Database programs export data records dưới dạng Fixed Length (có chiều
dài cố định) Text String. Khi một Text String là gồm rất nhiều Data fields
concatenated lại với nhau như thế việc ghi nhớ mỗi Data field bắt đầu từ character
thứ mấy là cả một vấn đề.
Dưới đây là một VB6 Class dùng cho Fixed Length Text String để ta extract những
SubStrings từ nó một cách dễ dàng và không bị lẫn lộn.
Giả sử ta có những Text Strings như sau:
123456789012345678901234567890123456789012345678901234567890123456789012123
4567890121234567890123456789012345
Truong Tam Phong 25 Greenfield Rd Cabramatta, NSW 21669724 3645
9724 1324
Le Thanh Long 24/426 King St Fairfield, NSW 2165 9425 2534
9425 7755
Hàng thứ nhất bên trên là để dùng làm thước mẫu cho ta thấy mỗi hàng Text gồm có
nhiều Data fields nằm kế tiếp nhau (concatenated). Ta có thể đặt tên các Data fields
và xác định chiều dài (size) của mỗi Data field như dưới đây:
Name,20
Address1,20
Address2,20
Phone,12
Fax,12
Email,25
Nếu viết program theo lối thông thường ta sẽ nói đến Data field Phone bằng cách
dùng Function Mid, chẳng hạn như Mid(TextString,61,12) , 61 là Offset của Data
field Phone. Tương tợ như vậy, nói đến Data field Email ta phải viết
Mid(TextString,85,25), mà 85 là Offset của Data field Email.
Viết Code kiểu nầy rất dễ lầm lẫn nếu ta dùng các Data fields nầy thường. Do đó ta có
aLine.Delimiter = ","
FName = aLine.TokenAt(1)
SubString.FieldName = FName ' assign FieldName
SubString.Size = Val(aLine.TokenAt(2)) ' assign field Size in
character
SubString.Offset = Offset ' assign offset of SubString in String
' Update Offset value for the next data field
Offset = Offset + SubString.Size
myLength = myLength + SubString.Size
' Add an SubString Object to the DataFields collection
DataFields.Add Item:=SubString, Key:=FName
Set SubString = Nothing
Loop
' Fill the internal String with Blank spaces
mvarTextStringData = Space(myLength)
Close FileNum ' Close input file
End Property
Khi bạn chạy program mẫu kèm theo, trước hết nó instantiate một Object loại
clsTextRecord, load các Test Text Strings từ file Persons.txt vào một Listbox tên
lstInputString và đọc content của File chứa cấu trúc của các Data Fields tên
PersonRecordStructure.txt.
Listing của Sub Form_load như sau:
Private Sub Form_Load()
' Instantiate an Object of ClsTextRecord
Set ALongString = New ClsTextRecord
' Build the Collection of Datafields
ALongString.StructureFileName = App.Path & "\PersonRecordStructure.txt"
' Load the test Strings into the ListBox
PopulateListBoxFromFile lstInputString, "Persons.txt", False
End Sub