
Class dùng cho Delimited 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.
Dưới đây là một VB6 Class dùng cho delimeted text String, tức là những text strings
giống như:
John Smith;30 King Street, Newtown,NSW, Australia;9748 3635;18/03/1956
gồm những phần gọi là tokens được ngăn cách bằng character ";" , gọi là delimiter.
Thật ra delimiter character có thể là bất cứ character nào, thường thường là những
characters ít khi dùng. Trong các Comma Separated Values file, mỗi hàng Text là
một String dùng Comma "," làm delimiter character. Thí dụ như:
"26/3/2001","Peter King","Taxi fare",25.40
Các Tokens có thể là những data fields của một record, và chính mỗi Token cũng có
thể là một delimited Text String dùng một delimiter character khác. Thí dụ, một người
có thể có nhiều Telephone numbers và ta có thể ghép các số Telephone ấy lại với
nhau, dùng "~" làm delimiter character như sau:
Kim Lee;5 Red St, Ryde;9748 3635(W)~9736
2423(H)~0419409854(Mobile);7/05/1960
Trong program mẫu nầy bạn có một TextBox để chứa cái delimited TextString. Form
có một array of TextBoxes tên Text1 với array index có giá trị từ 0 đến 3. TextString ta
dùng ở đây có 4 tokens. Khi bạn click nút Process Text String, program sẽ ngắc
khúc Text String ở các delimiter characters rồi display chúng trong các TextBoxes
Text1.
Dưới đây là Listing của Sub CmdProcessTextString_Click:
Private Sub CmdProcessTextString_Click()
Dim DString As clsString ' Declare an Object of class clsString
Dim i
' Instantiate an Object called DString of class clsString
Set DString = New clsString
' Assign the text to DString
DString.Text = txtString

' Assign the Delimiter character ";" to DString
DString.Delimiter = ";"
' The text String has been automatically broken up into tokens
' Iterate through each of the 4 tokens
For i = 1 To DString.TokenCount
' Assign a Token to the appropriate Textbox
' Note that Text1 array index is in range 0..3
' so we use (i-1) for Text1 TextBoxes
Text1(i - 1) = DString.TokenAt(i)
Next
End Sub
Khi Delimited String đã được tokenised rồi, ta refer đến từng Token bằng cách viết
DString.TokenAt(i) mà i là index của Token trong Tokens Array. Nếu dùng con số
làm index kiểu nầy nhiều lần ta rất dễ bị lộn. Do đó có một cách thay thế những con
số 1,2,3 .v.v.. bằng những hằng số dễ nhớ bằng cách định nghĩa một loại Enum trong
một Basic Module như sau:
' We deliberately name each constant with the prefix cds which stands for
Const Delimited String
Public Enum FieldNames
cdsName = 1
cdsAddress = 2
cdsPhone = 3
cdsDOB = 4
End Enum
Sau đó ta có thể nói đến Token Phone bằng cách viết DString.TokenAt(cdsPhone)
Trong khi viết code mỗi lần muốn đánh các Constant nầy ta đánh prefix cds trước rồi
đánh Ctrl-Space để IDE popup những Constants được định nghĩa để ta chọn (dùng
up/down arrow keys để select Constant rồi đánh Enter) như trong hình dưới đây:
Bạn có thể download source code của program mẫu nầy kể cả class clsString.

Default delimiter character của Class clsString là "|". Mỗi lần bạn assign một Text
string hay một delimiter cho clsString Object là nó tự động tokenise (ngắc khúc) text
string thành một array of Tokens với array index values 1..TokenCount.
Ngoài ra, bạn còn có thể thay thế bất cứ Token nào bằng một Substring khác,
clsString Object sẽ tự động reconstruct Text String bên trong để bạn có thể lấy ra
modified Text String một cách dễ dàng. Listings của các Sub ReplaceToken và
ReconstructText của clsString như sau:
Public Sub ReplaceToken(TNum, NewToken)
' Replace a Token with a new substring
If (TNum > 0) And (TNum <= IMaxToken) Then
' Replace directly in the Token array
Tokens(TNum) = NewToken
' Rebuild the internal text string
ReconstructText
End If
End Sub
Private Sub ReconstructText()
' Reconstruct the internal string from the tokens and the delimiter
Dim i
strText = "" ' Initialise temporary string
For i = 1 To IMaxToken
' Concatenate this token to strText
strText = strText & Tokens(i)
' Append a delimiter character except for the last token
If i < IMaxToken Then strText = strText & strDelimiter
Next
End Sub
Dĩ nhiên khỏi phải nhắc bạn cũng nên biết rằng bên trong mỗi token tuyệt đối ta
không thể dùng một character giống hệt như delimiter character, vì clsString sẽ lầm
tưởng rằng character đó là một delimiter character hợp lệ. Thí dụ nếu delimiter
character là ";", thì để thay thế mọi semicolon character trong một token ra blank
space ta có thể viết như sau:
TokenText = Replace (TokenText, ";", " ")