Toon posts:

[VBA] zoekcode optimaliseren

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een stukje code geschreven waarbij in een array met plm 3000 velden gezocht wordt.
De zoekfunktie is gelijk aan het zoeken met de J in winamp. Tik je een letter a in, dan worden alle gevonden waarden met een a in een tekstbox weergegeven. indien de zoekwaarde wordt aangepast dan wordt de zoekfunktie meteen aangepast. Het werkt erg mooi, alleen de eerste zoekactie is erg traag (als je de eerste letter intikt) Daarna gaat het erg snel.

Ik verwacht dan ook dat het zoeken niet de bottlenek is, maar het vullen van de textbox FrmZoek.TbUitvoer.

Weet iemand iets om e.e.a. te versnellen?

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Find(sZoekWaarde As String)

Dim nRij As Integer
Dim nPos As Integer 'positie
Dim nLzw As Integer 'lengte zoekwaarde

FrmZoek.TbUitvoer.Value = Empty

If sZoekWaarde = Empty Then Exit Sub

nLzw = Len(sZoekWaarde)

For nRij = 0 To 3000
  For nPos = 1 To Len(klantArray(nRij))
    If LCase(Mid(klantArray(nRij), nPos, nLzw)) = LCase(sZoekWaarde) Then
      FrmZoek.TbUitvoer.Value = FrmZoek.TbUitvoer.Value & vbCr & klantArray(nRij)
      Exit For
    End If
  Next nPos
Next nRij

End Sub

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Heb je al eens een efficiënter zoekalgoritme geprobeerd? Boyer-Moore-Horspool zou een flink stuk sneller moeten zijn dan het stukje brute force code dat je nu gebruikt. Zie ook http://en.wikipedia.org/wiki/String_searching_algorithm. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.