Class dùng cho Delimited Text String
Có l lp trình vi Text String là công vic bn thường làm nht. Ðó là lý do ti sao
hơn mười năm trước Microsoft Basic ca Bill Gates rt thnh hành vì nó có nhng
String Functions rt tin dng như Left, Right và Mid.
Dưới đây là mt VB6 Class dùng cho delimeted text String, tc là nhng text strings
ging như:
John Smith;30 King Street, Newtown,NSW, Australia;9748 3635;18/03/1956
gm nhng phn gi là tokens được ngăn cách bng character ";" , gi là delimiter.
Tht ra delimiter character có th là bt c character nào, thường thường là nhng
characters ít khi dùng. Trong các Comma Separated Values file, mi hàng Text là
mt 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à nhng data fields ca mt record, và chính mi Token cũng có
th là mt delimited Text String dùng mt delimiter character khác. Thí d, mt người
có th có nhiu Telephone numbers và ta có th ghép các s Telephone y li vi
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 mu ny bn có mt TextBox để cha cái delimited TextString. Form
có mt array of TextBoxes tên Text1 vi array index có giá tr t 0 đến 3. TextString ta
dùng đây có 4 tokens. Khi bn click nút Process Text String, program s ngc
khúc Text String các delimiter characters ri display chúng trong các TextBoxes
Text1.
Dưới đây là Listing ca 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 ri, ta refer đến tng Token bng cách viết
DString.TokenAt(i) mà i là index ca Token trong Tokens Array. Nếu dùng con s
làm index kiu ny nhiu ln ta rt d b ln. Do đó có mt cách thay thế nhng con
s 1,2,3 .v.v.. bng nhng hng s d nh bng cách định nghĩa mt loi Enum trong
mt 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 bng cách viết DString.TokenAt(cdsPhone)
Trong khi viết code mi ln mun đánh các Constant ny ta đánh prefix cds trước ri
đánh Ctrl-Space để IDE popup nhng Constants được định nghĩa để ta chn (dùng
up/down arrow keys để select Constant ri đánh Enter) như trong hình dưới đây:
Bn có th download source code ca program mu ny k c class clsString.
Default delimiter character ca Class clsString là "|". Mi ln bn assign mt Text
string hay mt delimiter cho clsString Object là nó t động tokenise (ngc khúc) text
string thành mt array of Tokens vi array index values 1..TokenCount.
Ngoài ra, bn còn có th thay thế bt c Token nào bng mt Substring khác,
clsString Object s t đng reconstruct Text String bên trong để bn có th ly ra
modified Text String mt cách d dàng. Listings ca các Sub ReplaceToken và
ReconstructText ca 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 khi phi nhc bn cũng nên biết rng bên trong mi token tuyt đối ta
không th dùng mt character ging ht như delimiter character, vì clsString s lm
tưởng rng character đó là mt delimiter character hp l. Thí d nếu delimiter
character là ";", thì để thay thế mi semicolon character trong mt token ra blank
space ta có th viết như sau:
TokenText = Replace (TokenText, ";", " ")