• Thứ Sáu, 16/11/2007 08:39 (GMT+7)

    Lập trình đếm chuỗi trong file text

    Câu hỏi :

    Xin hướng dẫn lập trình Visual Basic đếm số lần xuất hiện một chuỗi trong một file text.



    Trả lời :

    Có nhiều giải thuật đếm chuỗi khác nhau, mỗi giải thuật có tính chất riêng. Các giải thuật hoàn toàn độc lập với ngôn ngữ. Thí dụ sau đây là qui trình viết ứng dụng VB đếm chuỗi trong file văn bản dùng giải thuật dò tìm tuần tự từ đầu file đến cuối file. Qui trình xây dựng ứng dụng gồm các bước chính:

    1. Chạy VB, tạo Project “Standard EXE”, thiết kế Form ứng dụng có dạng sau:
    Lưu ý Form ứng dụng có các đối tượng: 2 label, 2 textbox với tên là txtPathname và txtKetqua, 1 button chọn file tên là btnBrowse, 1 CommonDialog tên là CommonDialog1. Riêng đối tượng CommonDialog là 1 ActiveX Control nên để có nó, trước hết bạn cần phải “add” nó vào Project bằng cách chọn menu Project.Component để hiển thị cửa sổ Components rồi duyệt tìm và chọn mục “Microsoft Common Dialog Control 6.0”.

    2. Nhấn kép chuột vào button Browse để tạo thủ tục xử lý sự kiện Click cho nó rồi viết code như sau:

    ‘thủ tục xử lý Click button Browse
    Private Sub btnBrowse_Click()
    ‘hiển thị cửa sổ hiển thị và chọn file
    CommonDialog1.ShowOpen
    ‘đếm chuỗi và hiển thị kết quả
    txtKetqua = “Số lần chuỗi xuất hiện là “ & StrCount(CommonDialog1.filename, txtString.Text)
    End Sub

    ‘hàm đếm chuỗi trong file
    Private Function StrCount(filename As String, txtString As String) As Integer
    ‘định nghĩa các biến cần dùng
    Dim FileLength
    Dim bytcontent() As Byte
    Dim txtcontent As String
    Dim bytString() As Byte
    Dim lenString As Integer
    ‘đổi chuỗi Unicode về dạng chuỗi byte
    bytString = StrConv(txtString, vbFromUnicode)
    lenString = Len(txtString)
    ‘mở file text và đọc vào
    Open filename For Input As #1
    FileLength = LOF(1)
    txtcontent = Input(FileLength, #1)
    Close #1
    ‘đổi chuỗi Unicode về dạng chuỗi byte
    bytcontent = StrConv(txtcontent, vbFromUnicode)
    wcount = 0
    MaxIdx = FileLength - lenString
    ‘lặp tuần tự dò và đếm chuỗi
    Do While i <= MaxIdx
    ‘tìm đến vị trí đầu chuỗi khả dĩ
    Do While (i <= MaxIdx) And (bytString(0) <> bytcontent(i))
    i = i + 1
    Loop
    ‘nếu hết file thì dừng
    If i > MaxIdx Then Exit Do
    ‘nếu đúng là chuỗi thì tăng biến đếm
    If BytesCompare(bytString, bytcontent, i, lenString) Then
    wcount = wcount + 1
    ‘dời vị trí dò tiếp về sau chuỗi tìm được
    i = i + lenString
    Else
    ‘dời vị trí dò tiếp về ký tự kế tiếp
    i = i + 1
    End If
    Loop
    ‘trả về giá trị đếm được
    StrCount = wcount
    End Function

    ‘hàm so sánh 2 chuỗi
    Private Function BytesCompare(x() As Byte, y() As Byte, ByVal start As Integer, ByVal count As Integer) As Boolean
    For i = 0 To count - 1
    If x(i) <> y(start + i) Then
    BytesCompare = False
    Exit Function
    End If
    Next i
    BytesCompare = True
    End Function

    3. Chọn menu Run.Start để thử chạy ứng dụng rồi nhập chuỗi cần đếm, nhấn button Browse để duyệt và chọn file text, chương trình sẽ đếm và hiển thị kết quả lên textbox của Form.

    Chuyên mục: Cơ sở dữ liệu