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

textbox中的字符串可不可以对比?解决方案

2012-01-10 
textbox中的字符串可不可以对比?比如:textbox里显示内容如下:------------------------------------------

textbox中的字符串可不可以对比?
比如:textbox里显示内容如下:
----------------------------------------------------
11111111111111111222222222
aaaaa   bbbbbbb   ccccc   000   XXXX
aaaaa   bbbbbbb   ccccc   000   XXXX
aaaaa   bbbbbbb   ccccc   000   XXXX
aaaaa   bbbbbbb   ccccc   000   XXXX
aaaaa   bbbbbbb   ccccc   000   XXXX
aaaaa   bbbbbbb   ccccc   000   XXXX
aaaaa   bbbbbbb   ccccc   000   XXXX
dddddreeeeeeeeeeeeeeerrrrrrr

-----------------------------------------------
以上内容中,XXXX是会变的,其他都是固定不变,求一种算法
要求:1,当任意连续的5行内容相同时,把XXXX存到变量S中

            2,TEXTBOX(richtetbox)中的字符串可能比较大,尽量优化算法


[解决办法]
比如:textbox里显示内容如下:
----------------------------------------------------
11111111111111111222222222
aaaaa bbbbbbb ccccc 000 XXXX
aaaaa bbbbbbb ccccc 000 XXXX
aaaaa bbbbbbb ccccc 000 XXXX
aaaaa bbbbbbb ccccc 000 XXXX
aaaaa bbbbbbb ccccc 000 XXXX
aaaaa bbbbbbb ccccc 000 XXXX
aaaaa bbbbbbb ccccc 000 XXXX
dddddreeeeeeeeeeeeeeerrrrrrr

dim strlines() as string
dim tmp as string, s as string
dim i as integer, n as integer

on error goto subexit
strline = split(text1, vbcrlf)
tmp = strline(0)
for i = 1 to ubound(strline)
if tmp = strline(i) then
n = n + 1
if n = 4 then s = right(tmp, 4):exit for
else
tmp = strline(i):n = 0
end if
next i
subexit:
[解决办法]
Private Sub Command1_Click()
Dim intCnt As Integer
Dim i As Integer
Const spstr As String = "aaaaa bbbbbbb ccccc 000 "
Dim strArray() As String
Dim strSave As String
Dim strTemp As String
Dim S As String

strArray = Split(Text1.Text, vbCrLf)
For i = 0 To UBound(strArray)
If Mid(strArray(i), 1, 24) = spstr Then
strTemp = Replace(strArray(i), spstr, " ")
If strSave <> " " Then
If strTemp = strSave Then
intCnt = intCnt + 1
If intCnt = 4 Then
S = strTemp
Exit Sub
End If
Else
strSave = strTemp
intCnt = 0
End If
Else
strSave = strTemp
intCnt = 0
End If
Else
strSave = " "
intCnt = 0
End If
Next
End Sub

[解决办法]
用like关键字来判断

如 "abcdefg " like "abc* "结果为True
[解决办法]
若LZ的格式都是一样的,即XXXXX XXXXXXX XXXXX 000 XXXX,可以:
'按VBCRLF把TEXTBOX读入数组
dim StrArr() as string,StrArrEx() as string * 20,S() as string
StrArr() = Split(Textbox.Text,vbcrlf)
StrArrEx() = Split(Textbox.Text,vbcrlf)
'而后,将字符串截取并判断是否连续五行相等
dim mIndex as long ,mUsa as long,n as long
mUsa = ubound(strarr)
Redim S(mUsa) as string
for mIndex = 1 to mUsa
if StrArrEx(mIndex) = StrArrEx(mIndex-1) then n=n+1 else n=0
if n = 4 then
S(mIndex)=right(StrArr(mIndex),4)
S(mIndex-1)=right(StrArr(mIndex-1),4)


S(mIndex-2)=right(StrArr(mIndex-2),4)
S(mIndex-3)=right(StrArr(mIndex-3),4)
S(mIndex-4)=right(StrArr(mIndex-4),4)
n=0
end if
next
结果会保存在S()中,输出其中非空的即可。
我写这个和上面基本思路大体相同的,没测试,主要就是分行,然后比较,仅仅是比较时所用的空间要大于上面2位,我使用了3个数组,其中值得注意的是第2个:StrArrEx() as string * 20这种定义方式,直接会把字符格式化处理为20个长度,所以整个代码没有逐个分割字符然后比较的过程,另外beal_p(学习.Net2005中) 的方式恐怕不行,因为定义了一个常数( Const spstr As String = "aaaaa bbbbbbb ccccc 000 "),而你不知道LZ的每行开头的到底是什么。

我的算法可能有问题,没测试,不用说徒手写代码了,就是在编辑器里写还经常错呢,呵呵。

热点排行