首页
社区
课程
招聘
[求助]VB语言,怎么样才能提高运算速度?
发表于: 2015-7-5 10:51 5707

[求助]VB语言,怎么样才能提高运算速度?

2015-7-5 10:51
5707
http://yunpan.cn/cQi5RWEgvhTcy (提取码:bcc2) 软件源码

http://37353b.l71.yunpan.cn/lk/cQNH9m7ZCbUPL( 提取码:782b)  需要验证的原数据

大底1放在文本框1,,大底2放在文本框2,

处理的是2000条左右的数据,但是会出现卡死。。。大牛我错吗。。。求指点啊啊!!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 96
活跃值: (36)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
不是语言的问题,是算法的问题
2015-7-5 10:59
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是啊,由于是新手,所以也只能写成这样了。。。求指点呀
2015-7-5 11:14
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
因为是新手,所以只能写成这样,求带。。。
2015-7-5 11:16
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
把代码贴出来啊

还要把思路写出来,
高手们很懒的,你要是偷懒,他们只会比你更懒,都懒得看你 的帖子~
2015-7-5 11:29
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Option Explicit
Private Sub Picture1_Click()
Form1.WindowState = 1
End Sub
Private Sub Command1_Click()
Text1.Text = ""
End Sub
Private Sub Command3_Click()
RichTextBox1.Text = ""
End Sub
Private Sub Command4_Click()
Text2.Text = ""
End Sub

Private Sub Command2_Click()
'检验
    RichTextBox1.Text = ""
    Dim count1 As Long, count2 As Long 'count1对的次数,count2错的次数
    Dim ary1, ary2 '存放分割后的数组
   
    If Text1 = "" Or Text2 = "" Then Exit Sub
   
    Text1.Text = Replace(Replace(Text1.Text, ",", vbCrLf), " ", vbCrLf)
    ary1 = Split(Text1.Text, vbCrLf)
    Label8.Caption = UBound(ary1) + 1
   
    Text2.Text = Replace(Replace(Text2.Text, ",", vbCrLf), " ", vbCrLf)
    ary2 = Split(Text2.Text, vbCrLf)
    Label9.Caption = UBound(ary2) + 1
   
    Dim i, j
    For i = 0 To UBound(ary2)
   
        Dim ok
        ok = False
        For j = 0 To UBound(ary1)
            If ary2(i) = ary1(j) Then
                ok = True
                Exit For
            End If
        Next
        
        If ok = True Then
            RichTextBox1.SelStart = Len(RichTextBox1.Text)
            RichTextBox1.SelText = ary2(i) & vbTab & "正确" & vbCrLf
            count1 = count1 + 1
        Else
            RichTextBox1.SelStart = Len(RichTextBox1.Text)
            RichTextBox1.SelColor = vbRed
            RichTextBox1.SelText = ary2(i) & vbTab & "错误" & vbCrLf
            RichTextBox1.SelColor = vbBlack
            count2 = count2 + 1
        End If
    Next
   
    Label2 = count1
    Label4 = count2

End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyA And Shift = vbCtrlMask Then
Text1.SelStart = 0
Text1.SelLength = Len(Text1)
End If
End Sub
Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyA And Shift = vbCtrlMask Then
Text2.SelStart = 0
Text2.SelLength = Len(Text2)
End If
End Sub
2015-7-5 11:45
0
雪    币: 631
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
hash表匹配。不然循环嵌套循环,快等于数据的次方了。另外,处理的时候,隐藏控件看看。
2015-7-5 12:03
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
直接用正则表达式就可以了
2015-7-5 12:13
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
能直接帮忙修改一下代码么,新手哪会那么多呀,大牛。。。
2015-7-5 12:33
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Sub TextComp()
    Const sTxt1$ = "abc,efg,ijk,lmn"
    Const sTxt2$ = "abc,efg,lmn,opq,xyz,998"

    Dim sPat$, i&
    sPat = Replace(sTxt1, ",", "|")

    Dim oRE As New RegExp ' 引用 Microsoft VBScript Regular Expressions 5.5
    With oRE
        .Global = True
        .Pattern = sPat
        With .Execute(sTxt2)
            Debug.Print "正确次数:" & .Count
            For i = 0 To .Count - 1
                Debug.Print .Item(i) ' 依次输出 正确的内容
            Next
        End With
    End With

End Sub

==========
给你个栗子
2015-7-5 13:04
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我不是松鼠,不吃栗子。。。。大大
2015-7-5 15:48
0
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
12
目测一下,你的目的是判断“大底2”里面的数字是否在“大底1”里面存在是吧?
然后“大底1”与“大底2”的数字均为4位数。
再来,看见你有Split(Text1.Text, vbCrLf),可假设文件内每行一个数字,之后换行才是下一个数字
故而
Option Explicit
dim ary(10000) as long
dim i as long
dim intStr as string

for i=1 to 10000
   ary(i)=0
next

Open "大底1.txt" For Input As #1
Do While Not EOF(1)
  Line Input #1, intStr
  ary(val(intStr)) = 1
Loop
Close #1

Open "大底2.txt" For Input As #1
Do While Not EOF(1)
  Line Input #1, intStr
  ary(val(intStr)) = ary(val(intStr)) +1
Loop
Close #1

for i=1 to 10000
   if ary(i)>0 then
     txtResult = txtResult + str(i) + vbLFCR //i为大底1内与大底2内相同的数的值
next

差不多了吧,vb真蛋疼。。算法复杂度应该是2n+m?。。。
2015-7-5 21:44
0
雪    币: 10617
活跃值: (3539)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
其实这不是vb的问题,你这么写,vc也快不了。我只能说,变量是需要声明的,循环内不要老调用控件属性,粗略看了一下,好像是查找关键词出现的位置。
2015-7-5 22:39
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好吧,谢谢各位大牛了~~~

是真的不怎么会!

初学者,看到那么多有点晕菜
2015-7-5 22:42
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
能直接改我的代码么。。。我实在不会啊,大牛。。。。。。你都蛋疼了,我就..........
2015-7-6 14:28
0
雪    币: 631
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
hash 有开源模块.
控件隐藏可以提高循环处理速度.
方法   .visable = false
2015-7-8 11:59
0
游客
登录 | 注册 方可回帖
返回
//