关于VB搜索TXT文本并判断有无重复遇到的问题

我的代码是这样的,大概目的就是,当搜索到map.txt里已经存有某个地图的数据时,就弹出提示框,若没有,则添加
(map.txt里的格式为:
地图1名|数据1
地图2名|数据2
地图3名|数据3
……)
Dim txt As String, mapval As Double, wz As Single
Open App.Path & "\map.txt" For Input As #1 '先打开MAP.TXT搜索有没有相同的地图名称
While Not EOF(1)
Line Input #1, a
b = Combo1.Text
wz = InStr(a, "|")
mapname = Left(a, wz - 1)
Dim jg As Boolean
If InStr(a, b) > 0 And Len(mapname) = Len(Text3.Text) Then
jg = True '若有则给JG赋值为TRUE
Else
jg = False '否则赋值为FALSE
End If
Wend
Close #1

If jg = True Then
MsgBox "已添加过该地图!" ’为TRUE时弹出提示框
Else
Open App.Path & "\map.txt" For Append As #1
Print #1, Text3.Text & "|" & Label10.Left - Label9.Left
Close #1
MsgBox "添加地图成功!" '‘若无则添加地图
End If

======================================
现在问题就出在,因为在搜索时是WHILE WEND循环,一直搜索到文本结尾,所以若即将添加的地图名正好出现在TXT文件的最后一行时,JG则返回TRUE,此时出现提示,一切正常。但是虽然已经有过该地图,若该地图名在TXT文件中不是最后一行时,则JG的值就被最后一行的值覆盖了,返回的仍然是FALSE,于是又添加了一次地图信息,就起不到判断作用了。

试了在第一个IF语句中的JG=TRUE后又加了一个EOF(1)=TRUE,不行,提示错误。改变整个语句的结构也不行,现在想有没有其它的办法可以让VB一次性地搜索全部文档,或者在搜索到同样字符串时立刻停止?

看了你的问题。存在就不添加。
首先,(map.txt里的格式为:
地图1名|数据1
地图2名|数据2
地图3名|数据3
……)
那么就可以直接 在整个内容里 搜 “地图 名|”如果存在就不添加。
|分割符号必须有,用来区分 是地图名,因为后面数据有可能会和地图名一样的。
代码:
Dim db As String
Dim dbLen As Long

b = Combo1.Text & "|"

Open App.Path & "\map.txt" For Binary As #1
If Not EOF(1) Then
dbLen = LOF(1)
db = Input(dbLen, 1)
End If
Close #1
If InStr(db, b) > 0 Then
jg = True '若有则给JG赋值为TRUE
Else
jg = False '否则赋值为FALSE
End If

If jg = True Then
MsgBox "已添加过该地图!" ’为TRUE时弹出提示框
Else
Open App.Path & "\map.txt" For Append As #1
Print #1, Text3.Text & "|" & Label10.Left - Label9.Left
Close #1
MsgBox "添加地图成功!" '‘若无则添加地图
End If

如果数据量大 建议用数据库。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-10-30
修改如下:
Dim txt As String, mapval As Double, wz As Single
Open App.Path & "\map.txt" For Input As #1 '先打开MAP.TXT搜索有没有相同的地图名称
While Not EOF(1)
Line Input #1, a
b = Combo1.Text
wz = InStr(a, "|")
mapname = Left(a, wz - 1)
Dim jg As Boolean
If InStr(a, b) > 0 And Len(mapname) = Len(Text3.Text) Then
jg = True '若有则给JG赋值为TRUE
exit While
Else
jg = False '否则赋值为FALSE
End If
Wend
Close #1

If jg = True Then
MsgBox "已添加过该地图!" ’为TRUE时弹出提示框
Else
Open App.Path & "\map.txt" For Append As #1
Print #1, Text3.Text & "|" & Label10.Left - Label9.Left
Close #1
MsgBox "添加地图成功!" '‘若无则添加地图
End If
第2个回答  2009-10-30
你可以用 exit sub 或 exit function 来跳出.
注: 如果你的程序段为 Function 则用eixt function, 为sub则用exit sub.
如果是for 循环,则可用exit for 来终止循环.

关于VB搜索TXT文本并判断有无重复遇到的问题
看了你的问题。存在就不添加。首先,(map.txt里的格式为:地图1名|数据1 地图2名|数据2 地图3名|数据3 ……)那么就可以直接 在整个内容里 搜 “地图 名|”如果存在就不添加。|分割符号必须有,用来区分 是地图名,因为后面数据有可能会和地图名一样的。代码:Dim db As String Dim dbLen A...

用VB读一个TXT文件当遇到16744639时替换成16744703,遇到5259392换成8466...
可以用脚本,解决简单问题省时省力,打个比方,用BAT脚本吧~echo off :abc set \/p str=<A.TXT if %str%==16744639 echo 16744703>A.TXT if %str%==5259392 echo 8455944>A.TXT goto abc

vb如何复制txt中重复的数据
1、如果你知道重复的数据的内容,就比较简单,这个不用我多说了;2、如果你不知道重复的数据的内容,但知道重复的数据的字节数,可以使用循环的方法查询;3、如果你不知道重复的数据的内容,又不知道重复的数据的字节数,同样可以使用循环的方法查询,但是这种查询如果Text1中的数据量比较大,是十分费时...

请问VB高手如何判断TXT文档中比对判断不连续数字?
Dim s As String, a1() As String, a2() As String, i As Long, j As Long, bxf As Boolean Open "1.txt" For Binary As #1 s = Input(LOF(1), #1) & ","Close #1 Open "2.txt" For Binary As #1 a1 = Split(Input(LOF(1), #1), ",")Close #1 For i = 0 To UBo...

vb.net问题 如何读取一个txt文件的内容并判断
Dim Mytxt As String = ""Dim s As String Do While r.Peek > -1 '是否到文件尾 s = r.ReadLine '从打开的文件中读取一行内容 Mytxt = Mytxt & s & vbCrLf '逐行读取文本,并连接到变量Mytxt中 Loop r.Close() '关闭对象 '判断是否与变量相等etjq,略了吧???End Sub End...

哥们求助,VB怎么比较文本输入是否与TXT文件中的某一行的内容相一致...
可以先循环读取文件中所有的数据。每次读取出的数据的开头和结尾加上vbNullChar后,附加到一个字串变量(比如strAllData)的末尾。比较时,先把EG文本输入的001253的开头和结尾加上vbNullChar赋值到变量strCurrentData,然后执行If InStr(strAllData,strCurrentData)=0 Then 退出语句,在If InStr(strAllData,...

VB text 文本内容比较问题
将以下复制到txt文本内,再将文本文件改为frm.frm 使用VB打开 以下功能实现:PS:以下实现所有相同组合,可以改改,得到不重复的结果集 >当第1个 第3个,第5个相同时,会输出 1-3 ;1-5;3-5相同 >5个都相同时输出所有组合,共10组:序号:[0] -> 序号:[1] 相同 序号:[0] -> 序号:[2...

怎么vb挑出一个文本中重复的内容
你这个不好办,除非手工输入相同字段内容 再查找是否有重复!把一个字段写入aa 文章写入bb private sub command1_click()if instr(bb,aa) then open "c:\\1.txt" as output #1 output #1,aa 1.close else msgbox("没有重复")end if end sub ...

vb怎么判断TXT文本框重的换行
Private Sub Command1_Click()arr = Split(Text1.Text, vbCrLf)For i = 0 To UBound(arr)For j = 1 To Len(arr(i))s = Mid(arr(i), j, 1)If IsNumeric(s) = True Then o = o & s End If Next o = o & vbCrLf Next Text2.Text = o End Sub ...

VB查找搜索字符串的问题
这样会很慢 总体思路用instr返回timeover的T的位置,然后用mid截取长度字符串。也可以通过RICHTEXTBOX控件的select方法。用richtextbox读取文本,先用richtextbox的find查找字符串timeover位置 再用select(刚才find的返回值+x位,20)选取字符串 再通过selecttext属性读取 (用VB.NET会方便一些)richtextbox...

相似回答
大家正在搜