Logo of Vovisoft

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 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)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 ReplaceTokenReconstructText 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, ";", " ")

 

  Học Microsoft Visual Basic 6.0