VB如何进行高速文本查找

作者&投稿:爱新觉罗家 (若有异议请与网页底部的电邮联系)
VB中如何实现文本查找功能?~

实现查找功能的关键在于使用InStr函数,这个函数可以找到指定的字符串在另一字符串中最先出现的位置。我们先来看一看使用这个函数的语法:
InStr([start, ]string1, string2[, compare])
这个函数需要的的参数是起始位置、主体字符串、要查找的字符串;Compare是可选参数。指定字符串比较。此compare参数是可以省略的,也可以是 0, 1或 2。指定0(缺省)做二进制比较。指定1做不区分大小写的文本比较。例如我们要查找在字符串“abcdefg”中是否存在“cd”并返回其位置,则使用下面的语句就可以实现: pos=InStr(1,"abcdefg","cd")
则pos会返回3表示查找到并且位置为第三个字符开始。这就是“查找”的实现,而“查找下一个”功能的实现就是把当前位置作为起始位置继续查找。
下面举例说明:

  放置一个文本框TEXT1供用户输入文本或调入文本文件,用来做在其中查找文本的验证,放置另一个文本框TEXT2供用户输入要查找的字符串,放置两个命令按钮,Command1、Command2,其标题分别为“查找”、“查找下一个”。

  在窗体的总体声明部分写如下代码 :

   Option Explicit '定义目标位置变量
   Private TargetPosition As Integer

    '编写一个查找函数
   Private Sub FindText(ByVal start_at As Integer)
   Dim pos As Integer
   Dim target As String
   '获取用户输入的要查找的字符串
   target = text2.Text
   pos = InStr(start_at, text1.Text, target)
   If pos > 0 Then
      '找到了匹配字符串
      TargetPosition = pos
      text1.SelStart = TargetPosition - 1
      '选中找到的字符串
      text1.SelLength = Len(target)
      text1.SetFocus
   Else '没有找到匹配的字符串
   MsgBox "没找到!"
   text1.SetFocus
   End If
   End Sub

   '双击“查找”命令按钮:
   Private Sub command1_Click() '从第一个字符处开始查找
   FindText 1
   End Sub

   '双击“查找下一个”按钮:
   Private Sub command2_Click() '从当前位置继续查找
   FindText TargetPosition + 1
   End Sub

  运行程序,在文本框1中输入一些字符串,在文本框2中输入要查找的字符串,单击 “查找”按钮和“查找下一个”按钮进行验证。

如果你说的是在text1的里面找text2里写的内容的话用instr函数。
参考代码:

Private Sub Command1_Click()
Text1.SelStart = 0
a = InStr(Text1, Text2)
b = Len(Text2)
If a > 0 Then
Text1.SelStart = a - 1
Text1.SelLength = b
End If
End Sub

我的方法不知道好用不。不过速度可以保证,不过我家是双核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
c = InStr(c + 1, a, e)
End If
End If

Loop

b = b + STEPLONG
Loop
End Function

在窗体中,添加一个TEXT1和TEXT2的TEXTBOX。
第一个用于输入你要装载的文本地址:默认是同目录的A.TXT。我拿的是射雕英雄传大概1000+K的文档做的测试。
第二个用于你要查找的字符串。

添加一个Label,名称改为Labover

添加一个按钮,名字默认,为COMMAND1

加入代码:
Private Sub Command1_Click()
Dim a As nFind
Open Text1.Text For Binary As #1
a.nFirst = 1
a.nEnd = LOF(1)
a = Findword(1, Text2.Text, a)
Close #1
If a.nFirst Then
Labover.Caption = Text2.Text + "已找到 在:第" + Str(a.nFirst) + "到" + Str(a.nEnd)
Else
Labover.Caption = "找不到!!!!!!!!!!!!!!!!"
End If
End Sub

Private Sub Form_Load()
Text1.Text = App.Path + "\a.txt"
Text2.Text = "要加分给我哈"
End Sub

运行即可

要做到定位,只要把行数和列数重新输给RTFTEXTBOX就可以了。(这个RTFTEXTBOX的操作我不是很熟悉,你自己然已经做到了,我就不多说了)

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Command1_Click()
Dim a As Long, b As String, c As String, x As Long
x = GetTickCount
b = rtfBox.Text
c = txtSearch.Text
a = InStr(1, b, c)
Debug.Print a, GetTickCount - x
'rtfBox.SetFocus
'If a > 0 Then rtfBox.SelStart = a-1
End Sub

900K文本 查找最后一个字符串我用了不到150毫秒 找字符位置并不慢 关键是将光标定位会很慢

Dim Targetposition As Currency

Private Function FindText(ByVal Start_At As Currency, ByVal Target As String, ByVal CheckLetter As Boolean)
Dim pos As Currency
Dim DestText As String
DestText = Right$(rtfBox.Text, Len(rtfBox.Text) - Start_At)
Select Case CheckLetter
Case True
pos = InStr(DestText, Target)
Case False
pos = InStr(UCase$(DestText), UCase$(Target))
End Select
If pos > 0 Then '找到了匹配字符串
Targetposition = pos
rtfBox.SelStart = Start_At + Targetposition - 1

'选中找到的字符串
rtfBox.SelLength = Len(Target)
rtfBox.SetFocus
Else '没有找到匹配的字符串
MsgBox "没找到!"
rtfBox.SetFocus
End If
End Function

Private Function FindText2(ByVal Start_At As Currency, ByVal Target As String, ByVal CheckLetter As Boolean)
Dim pos As Currency
'Dim DestText As String
'DestText = Right$(rtfBox.Text, Len(rtfBox.Text) - Start_At)
Select Case CheckLetter
Case True
pos = InStr(Start_At, rtfBox.Text, Target)
Case False
pos = InStr(Start_At, UCase$(rtfBox.Text), UCase$(Target))
End Select
If pos > 0 Then '找到了匹配字符串
Targetposition = pos
rtfBox.SelStart = Targetposition - 1

'选中找到的字符串
rtfBox.SelLength = Len(Target)
rtfBox.SetFocus
Else '没有找到匹配的字符串
MsgBox "没找到!"
rtfBox.SetFocus
End If
End Function

两个过程速度基本相同
建议使用KMP算法。

技术帖,强烈关注中

我是来凑热闹的诶。

能做索引吗?


用bat批处理对txt文本进行分割
echo off & title 分割文本 By 依梦琴瑶setlocal enabledelayedexpansion::设置要分割的文件set file=test.txtfor \/f "delims=" %%a in ('type "%file%"') do ( echo "%%~a" | findstr ^"\\^> >nul && ( for \/f "tokens=2 delims=> " %%b in ('echo "%%~a"') do set...

java web中的〈b〉和〈\/b〉是什么意思?
<b>标签是成对出现的,出现在b标签内的文本会被加粗显示

b)简述编辑框与文本框的区别
文本,区域。1、文本。在编辑框中可以输入或编辑多行文本,而在文本框中只能输入或编辑一行文本。2、区域。编辑框为若干行的一个区域,当编辑框的scrollbars属性设为T,还可包含滚动条,适合编辑较多内容的文本,文本框是在一行中显示数据,输入的内容放不下,会自动向左移动。

在Origin里如何插入竖直文本框?
1.首先,打开rigin进入软件的主界面以打开数据。2.其次,需要打开一个图形。3.单击界面左侧的T选项以输入文本。4.接着,输入“ Y = X + B”。5.选择文本,右键单击属性,点击进入。6.设置角度并输入旋转角度。 例如,这里是45度。 如果不知道度数,则可以尝试再试几个角度,看看哪个角度合适...

vb 有两个文本文件a,b如何查找b不包含于a的内容行 ?
1), 1), vbUnicode) Close #1 T = Split(B, vbCrLf) For i = 0 To UBound(T) If InStr(1, A, T(i)) = 0 Then TT = TT & T(i) & vbCrLf Next Open App.Path & "\\b不包含a的内容行.txt" For Output As #1 Print #1, TT Close #1End Sub'请参考采纳!谢谢!

在word中,开始选项卡字体组中的b按钮用于什么文本
文档。在word中,开始选项卡字体组中的b按钮用于文档中的文本,作用是使选定对象变为粗体。文档中的文本可以设置多种格式:颜色、加粗、字号、倾斜、下划线、字体等格式,我们可以直接用工具栏上的快捷按钮,也可以选中文字,右键选择“字体”对话框进行设置。

excel如何突出某字
这可以通过在B列的每个单元格中输入类似“=IF),"是苹果","非苹果")”的公式来实现。这个公式会检查A列的对应单元格是否包含“苹果”,如果包含,则B列显示“是苹果”,否则显示“非苹果”。举个例子,假设A1单元格中包含文本“我喜欢吃苹果”...

如何使用BCompare合并文件
1. 打开Beyond Compare软件,在主页面左侧新建会话目录下选择“文本合并”,右击“打开”,打开文本合并对话框;2. 点击左上方的打开文件按钮,浏览找到文件所在目录,并打开第一个文件;3. 选择中间文本列表区域的文本(点击文本前面的箭头)第一行时,下面目标文本自动替换为选中的文本:上述步骤简单的...

易语言 加入文本 速度可以提升么? 数据量大的情况,比如3W条数据需要2...
暂时没有,因为图形界面刷新需要时间,你可以改改思路,比如先把3万条连成一条(中间加换行符之类的),然后一次性加入

...即:将A文本文件中的某些特定内容用B文本中的某些特定内容替换_百度...
1. ctrl-o打开B文本 2. ctrl-h打开replace窗口 在search for pattern输入[\\d\\.]+即可 在replace with pattern输入set_value($word_no,$match)3. 点击replace,数据导入成功 然后替换A文本 4. ctrl-o打开A文本 5. ctrl-h打开replace窗口 在search for pattern输入vth=[\\d\\.]+即可 在replace ...

宜昌市17890627578: vb怎么很快的查找数据量很多的txt文件 -
宗圣都香砂: 1、对于文件的操作vb提供了open语句、print #语句、input #语句等语句来处理文件.2、读取多行文本,可以使用Line input #语句,一行行读取,再连接在一起,这种方法对大一点txt文件效率不高.3、下面提供一个高效率、一次性读入所有文本的vb6示例:Private Sub Command1_Click() Dim r Open "d:\readme.txt" For Binary As #1 r = StrConv(InputB(LOF(1), 1), vbUnicode) Close #1 Debug.Print r End Sub

宜昌市17890627578: VB中如何实现文本查找功能 -
宗圣都香砂: ---- 实现查找功能的关键在于使用InStr函数,这个函数可以找到指定的字符串在另一字符串中最先出现的位置,这个函数需要的的参数是起始位置、主体字符串、要查找的字符串.“查找下一个”功能的实现就是把当前位置作为起始位置继续查...

宜昌市17890627578: 如何在VB中实现文本中的查找 -
宗圣都香砂: For P = 1 To Len(MainForm.TextBox.Text)Tmp = Mid(MainForm.TextBox.Text, P, L)If SHT = Tmp ThenMainForm.TextBox.SelStart = P - 1MainForm.TextBox.SelLength = LMainForm.TextBox.SetFocusExit ForEnd If Next

宜昌市17890627578: 用VB 查找文本内容 -
宗圣都香砂: open "log.txt" for input as #1 open "log1.txt" for output as #2 do while not eof(1) line input #1,tmp if instr(tmp,"@")>0 then print #2,tmp loop close

宜昌市17890627578: 请问谁懂程序编程的?我现在学的就是程序编程vb.可我就是不懂怎样
宗圣都香砂: VB 编程技巧 VB中如何实现文本查找功能-Instr函数使用技巧 VB中如何实现文本查找功能 实现查找功能的关键在于使用InStr函数,这个函数可以找到指定的字符串在另一...

宜昌市17890627578: VB打开文本时如何进行查找.例如通过找开对话框选择某文本,如果该文本的同容中有某个关键字则打开文本 -
宗圣都香砂: '添加部件 common dialog control 6 Dim FilePath As String Sub OpenFile() On Error GoTo err1 With CommonDialog1.Filter = "文本文件|*.txt".FilterIndex = 1.ShowOpen FilePath = .FileName End With err1:End Sub Function OpenTxt(FilePath As...

宜昌市17890627578: 如何用vb查找指定文件名的文件内容 -
宗圣都香砂: 已经完成,请留下E _ M _ A _I L或者用下面内容1.建立一个窗体2.放置一个文本框,用于输入索引路径,文本框命名为txtDirPath3.放置一个按钮,用于开始索引,按钮命名为cmdSearch4.放置一个Label,用于显示索引进度,命名为lblState5.放置一个Command按钮,用于保存索引结果,命名为cmdSave

宜昌市17890627578: VB查找文本中文字 并取出后面的文字 -
宗圣都香砂: Private Sub Command1_Click() Dim AR() As String, AR2() As String sTxt = "2 01 01 00 00 00 00 00 00 00 F4 44 0C 00 08 01 29 01 03 00 00 00 00 00 00 00 F4 44 0C 00 08 01 D3 01 04 00 00 00 00 00 00 00 F4 44 0C 00 08 01 2A 01 06 00 00...

宜昌市17890627578: VB查找文本 -
宗圣都香砂: 第一问:要有一个按钮,2个textbox Private Sub Command1_Click() Dim a As Integer a = InStr(1, Text1.Text, Text2.Text, vbTextCompare) Text1.SetFocus Text1.SelStart = a - 1 Text1.SelLength = Len(Text2.Text) End Sub 第二问:Private Sub ...

宜昌市17890627578: 用VB实现文本查找和替换 -
宗圣都香砂: Private Sub cmdExit_Click() End End Sub Private Sub cmdFind_Click() Dim StrCz As String, StrTh As String, I As Integer, J As Integer, K As Integer StrCz = InputBox("你要查找什么?", "查找", "上海市") StrTh = InputBox("你要将...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网