首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB的instr函数不准确的原因解决方法

2012-03-15 
VB的instr函数不准确的原因我的程序大致过程是这样的:1.打开一个文章列表的网页,逐个读出标题,再用每个标

VB的instr函数不准确的原因
我的程序大致过程是这样的:
1.打开一个文章列表的网页,逐个读出标题,再用每个标题在标题库TitleFile里用instr函数查找,当返回0,则认为此标题是新标题,并在 TitleFile 后追加此标题,添加方式是 TitleFile = TitleFile & vbCrLf & Title(iTeam);
2.当返回大于0,则认为是重复标题,则不添加。

问题:函数常常不能准确的判断是否重复,明明已经重复了,但是instr依然返回0,请问问题有可能出在哪里?如果我这个方案不可行,是否有更科学的办法。
补充:由于数据量比较大,TitleFile字符串比较长,大约几千行标题,保存成txt文件也有50kb以上。

大致代码如下:

VB code
  If InStr(TitleFile, Title(iTeam)) > 0 Then     (重复标题的处理...)  Else     TitleFile = TitleFile & vbCrLf & Title(iTeam)  End If


[解决办法]
不是不准确吧。把你认为不准确的TitleFile, Title(iTeam)放出来看看……
[解决办法]
Dim Title() As String
Dim TitleFile As String

Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim MaxItem As Long
Dim s As String
Dim Temp() As String
Dim MaxNew As Long

MaxItem = UBound(Title)
ReDim Temp(MaxItem)

Temp(0) = Trim(Title(0))

For i = 1 To MaxItem
s = Trim(Title(i))
If s <> "" Then
For j = 0 To MaxNew
If s = Trim(Title(j)) Then
GoTo Found
End If
Next
MaxNew = MaxNew + 1
Temp(MaxNew) = s
End If
Found:
Next

ReDim Preserve Temp(MaxNew)

TitleFile = Join(Temp, vbCrLf)
End Sub
[解决办法]
注意中英文标点的区别,还有是否含回车符、换行符等等,还有instr比较方式等。
别把问题想成是程序函数的问题,多想想你自己的问题。

[解决办法]
顶楼上
这种基本的函数不要去怀疑
看看是不是字符串里面包含了全角空格之类的字符,这个用trim去不掉的。
[解决办法]
探讨
顶楼上
这种基本的函数不要去怀疑
看看是不是字符串里面包含了全角空格之类的字符,这个用trim去不掉的。

[解决办法]
楼主连这都怀疑。。。。。。。。
[解决办法]
。。。。。却不怀疑自己。。。。。。。
[解决办法]
探讨
我的程序大致过程是这样的:
1.打开一个文章列表的网页,逐个读出标题,再用每个标题在标题库TitleFile里用instr函数查找,当返回0,则认为此标题是新标题,并在 TitleFile 后追加此标题,添加方式是 TitleFile = TitleFile &amp; vbCrLf &amp; Title(iTeam);
2.当返回大于0,则认为是重复标题,则不添加。

问题:函数常常不……

[解决办法]
TitleFile = TitleFile & vbCrLf & Title(iTeam)
是一种非常低效的操作,因为VB的文本链接 & 操作 比如 a=b & c 时,需要计算出b,c的长度,然后分配一块容纳lenb(b)+lenb(c)的内存a,再将b拷贝到a、c拷贝到a,单独一个&效率没有什么大不了,但是,当使用循环进行连接,那么,拷贝的消耗完全超出你的想象!
同时,instr需要在对源字符串逐个对齐进行比较,相对于数组比较(开头字符对齐比较),又是一个低效的操作;

 因此,2L给你的代码应该是一个比较有效率的操作方式!
[解决办法]
探讨

TitleFile = TitleFile &amp; vbCrLf &amp; Title(iTeam)
是一种非常低效的操作,因为VB的文本链接 &amp; 操作 比如 a=b &amp; c 时,需要计算出b,c的长度,然后分配一块容纳lenb(b)+lenb(c)的内存a,再将b拷贝到a、c拷贝到a,单独一个&amp;效率没有什么大不了,但是,当使用循环进行连接,那么,拷贝的消耗完全超……

热点排行