Thema Datum  Von Nutzer Rating
Antwort
22.08.2021 21:39:01 Testert96
Solved
22.08.2021 23:51:43 Mase
NotSolved
23.08.2021 08:25:55 Tester96
NotSolved
23.08.2021 11:23:22 Mase
NotSolved
24.08.2021 19:33:40 Ulrich
NotSolved
25.08.2021 08:25:07 Tester96
NotSolved
25.08.2021 09:19:56 Gast38529
NotSolved
25.08.2021 15:28:45 Ulrich
NotSolved
25.08.2021 21:38:17 Tester96
NotSolved
Blau ein Vorschlag - Geschwindigkeit
26.08.2021 12:23:53 Ulrich
NotSolved

Ansicht des Beitrags:
Von:
Ulrich
Datum:
26.08.2021 12:23:53
Views:
481
Rating: Antwort:
  Ja
Thema:
ein Vorschlag - Geschwindigkeit

Hallo Tester96,

wenn es um Geschwindigkeit geht, dann kann man bei der Funktion natürlich einiges weglassen:

Public Function testeString(ByRef s As String) As Boolean
' testet s auf Gültigkeit:
'    der String muss die Länge 9 haben
'    der String darf ausschließlich die Buchstaben [1234567x] beinhalten
'    aufeinanderfolgende Ziffern müssen aufsteigend sein
'    es müssen alle Ziffern von 1 bis 7 vorhanden sein
'    jede Ziffer darf nur 1 mal vorkommen, x kommt 2 mal vor
Dim i As Long, letzteZiffer As Long
Dim schar As String, lchar As Long, countx As Long
Dim ZifferVorhanden(1 To 7) As Boolean
  
testeString = False
  
If Not Len(s) = 9 Then Exit Function                        ' Länge stimmt nicht
  
For i = 1 To 9
    schar = Mid(s, i, 1)
  
    If schar = "x" Then
        letzteZiffer = 0
        countx = countx + 1
  
    ElseIf InStr("1234567", schar) Then
        lchar = CLng(schar)
        If lchar < letzteZiffer Then Exit Function          ' Ziffer kleiner als vorherige
        letzteZiffer = lchar
        If ZifferVorhanden(lchar) Then Exit Function        ' Jede Ziffer nur 1 mal
        ZifferVorhanden(lchar) = True
  
    Else
        Exit Function
  
    End If
Next
  
If Not countx = 2 Then Exit Function                          ' x muss 2 mal vorkommen
  
testeString = True
  
End Function

Auf meinem Laptop brauchen damit 1.000.000 Aufrufe im Schnitt ca. 3,8 sec (für diesen Speed-Test wurden 100.000 Aufrufe mit 10 verschiedenen Strings benutzt, die Hälfte der Strings war gültig).

 

 

Puh, deine Logik hier

y = y - (Len(Replace(Zahl, x, "", 1)) = 6)

verstehe ich nicht ganz - das ist mir zu hoch :-)

Grüße, Ulrich

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
22.08.2021 21:39:01 Testert96
Solved
22.08.2021 23:51:43 Mase
NotSolved
23.08.2021 08:25:55 Tester96
NotSolved
23.08.2021 11:23:22 Mase
NotSolved
24.08.2021 19:33:40 Ulrich
NotSolved
25.08.2021 08:25:07 Tester96
NotSolved
25.08.2021 09:19:56 Gast38529
NotSolved
25.08.2021 15:28:45 Ulrich
NotSolved
25.08.2021 21:38:17 Tester96
NotSolved
Blau ein Vorschlag - Geschwindigkeit
26.08.2021 12:23:53 Ulrich
NotSolved