VB如何进行高速文本查找

来源:百度知道 编辑:UC知道 时间:2024/06/06 07:56:50
如题。
现在有500K+的文件,已经读入RtfTextBox。现在需要对它进行快速文本查找。

我的软件功能 用户在搜索文本框中每输入一个字符,就快速定位到那里。【因此,只需要高速搜索出第一个内容即可】

现在是这样写的(i为传出的找到的文本位置):
i = rtfBox.Find(txtSearch.Text, 0, Len(rtfBox.Text), IIf(chkLetter.Value = xtpChecked, rtfMatchCase, 0)) + 1

注释:
txtSearch.text是搜索文本框内容。IIf(chkLetter.Value = xtpChecked, rtfMatchCase, 0)此句用途是判断是否区分大小写。

现在的速度是延迟0.8秒左右,我希望做到延迟0.1秒的水准,所谓0.1秒以我计算机测试速度为准。因此你得自己准备一个500K+(500k以上)的文件进行测试

======================================================================
要求:编写一个函数Function,快速找出指定内容在文本中的位置(传入参数)
为了提速,不传入参数也可以。搜索源是rtfBox.text,搜索内容是txtSearch.text。

【高速的同时要稳定,不要运行常常崩溃。】

分数很好商量,200分也可以,我分数多的没处花:)。避免浪费先放这点分。如果你的答案很好,我会追加78分(100+78+采纳20分+回答2分=200分)

怎么写看你了,反正我不知道怎么去更快搜索。哈希?不现实……多线程?VB6的多线程是不稳定的。

Tip:最好不要用第三方内容(DLL/OCX/TLB/xxxxxx),用纯VB代码解决,API可以,ASM汇编也可以(我寄希望于此)。
平均速度没有0.1秒左右也行,只要比较快没有明显延迟(最大限制0.3秒)
(1)如果您的算法好,思路新颖,有具体代码(代码是否整洁无所谓哦呵呵)我会视情况在追加78分基础上

我的方法不知道好用不。不过速度可以保证,不过我家是双核1.8GHZ*2。你看看这个算法吧

添加模块,在模块内输入
Private Const STEPLONG = 3000
Public Type nFind
nFirst As Long
nEnd As Long
End Type
Public Function Findword(filenum As Integer, fWord As String, fileplace As nFind) As nFind
On Error Resume Next
Dim a As String * STEPLONG, d As String, f As String, b As Long, c As Integer
b = fileplace.nFirst
Do Until b >= fileplace.nEnd
Get filenum, b, a
e = Mid(fWord, 1, 1)
c = InStr(1, a, e)
Do Until c = 0
If c Then
f = String(Len(fWord), " ")
Get filenum, b + c - 1, f
If f = fWord Then
Findword.nFirst = b + c - 1
Findword.nEnd = c + Len(fWord) - 2 + b
Exit Function
Else