Ja, das binäre Suchen ist superschnell!
Die Prozedur "Excelvergleich" ist jetzt auch fertig (uff) und damit kann ich schnell vergleichen bei der (binären

) Suche. Die Prozedur lässt sich später mal verwenden um eine Liste zu sortieren.
Code: Alles auswählen
Dim Wort.s(24)
Global Dim sortiercode(256)
Global sortierung$= " !"+Chr(34)+"#$%&()*,./:;?@[\]^_`{|}~´+<=>§°0123456789"
sortierung$=sortierung$ + "aAáÁäÄbBcCdDeEéÉèÈêÊfFgGhHiIjJkKlLmMnNoOöÖpPqQrRsSßtTuUüÜvVwWxXyYzZ'-"
For i = 1 To Len(sortierung$)
sortiercode(Asc(Mid(sortierung$,i,1))) = i + 31 ; 31 dazu, damit es druckbare Zeichen werden
Next
Procedure.s ReplaceStrings(String$, StringsToFind$, StringsToReplace$, Separator$=";")
Protected n.l
For n=1 To CountString(StringsToFind$, Separator$)+1
String$=ReplaceString(String$, StringField(StringsToFind$, n, Separator$), StringField(StringsToReplace$, n, Separator$))
Next
ProcedureReturn String$
EndProcedure
Procedure Excelstringvergleich (string1.s,string2.s) ; wird von Excelvergleich aufgerufen
vergleichsergebnis=0
string1konvertiert$="" ;
string2konvertiert$=""
For scanbuchstabe = 1 To Len(string1.s)
string1konvertiert$=string1konvertiert$ + Chr(sortiercode(Asc(Mid(string1.s,scanbuchstabe,1))))
Next
For scanbuchstabe = 1 To Len(string2.s)
string2konvertiert$=string2konvertiert$ + Chr(sortiercode(Asc(Mid(string2.s,scanbuchstabe,1))))
Next
;Debug string1konvertiert$
;Debug string2konvertiert$
If string1konvertiert$ < string2konvertiert$ : vergleichsergebnis = -1 : EndIf
If string1konvertiert$ > string2konvertiert$ : vergleichsergebnis = 1 : EndIf
ProcedureReturn vergleichsergebnis
EndProcedure
Procedure Excelvergleich (string1.s,string2.s)
string1_ohnebindestrich$ = ReplaceString(string1.s, "-", "")
string2_ohnebindestrich$ = ReplaceString(string2.s, "-", "")
;Debug "1ohnebind: " + string1_ohnebindestrich$
string1_ohnebindestrich_gross_egal$ = LCase(string1_ohnebindestrich$)
string2_ohnebindestrich_gross_egal$ = LCase(string2_ohnebindestrich$)
;Debug "1großegal: " + string1_ohnebindestrich_gross_egal$
string1_ohnebindestrich_gross_egal_umlaute_weg$ = ReplaceStrings(string1_ohnebindestrich_gross_egal$, "á;ä;é;è;ê;ö;ü", "a;a;e;e;e;o;u" )
string2_ohnebindestrich_gross_egal_umlaute_weg$ = ReplaceStrings(string2_ohnebindestrich_gross_egal$, "á;ä;é;è;ê;ö;ü", "a;a;e;e;e;o;u" )
excelvergleichswert = Excelstringvergleich (string1_ohnebindestrich_gross_egal_umlaute_weg$,string2_ohnebindestrich_gross_egal_umlaute_weg$)
;Debug " "
;Debug "Ver1: " + string1_ohnebindestrich_gross_egal_umlaute_weg$
;Debug "Ver2: " + string2_ohnebindestrich_gross_egal_umlaute_weg$
;Debug "Wert: " + Str(excelvergleichswert )
If excelvergleichswert = 0
;Debug "Prüfen Umlaute"
excelvergleichswert = Excelstringvergleich (string1_ohnebindestrich_gross_egal$,string2_ohnebindestrich_gross_egal$)
If excelvergleichswert = 0
;Debug "Prüfen"
excelvergleichswert = Excelstringvergleich (string1_ohnebindestrich$,string2_ohnebindestrich$)
If excelvergleichswert = 0
;Debug "Prüfen"
endergebnis = Excelstringvergleich (string1.s,string2.s)
Else ; fertig
endergebnis = excelvergleichswert
EndIf
Else ; fertig
endergebnis = excelvergleichswert
EndIf
Else
endergebnis = excelvergleichswert
EndIf
ProcedureReturn endergebnis
EndProcedure
;Einlesen
Restore Worte
For zz = 1 To 18
Read Wort.s(zz)
;Debug Wort.s(zz)
Next
;Ausgabe
For zz = 1 To 17
vergleich = Excelvergleich (Wort.s(zz),Wort.s(zz+1))
If vergleich = -1 : vergleich$ = " ist kleiner als " : EndIf
If vergleich = 0 : vergleich$ = " ist gleich " : EndIf
If vergleich = 1 : vergleich$ = " ist größer als " : EndIf
Debug Wort.s(zz) + vergleich$ + Wort.s(zz+1)
Next
End
MessageRequester("Info", "Hallo", #MB_ICONASTERISK)
;MessageRequester("Info", A$, #MB_ICONASTERISK)
DataSection
Worte:
Data.s "haustür","haus-tür","hausTür","haus-Tür","Haustür","Haus-tür","Haus--tür","HausTür","Haus-Tür","HAustür","HAus-Tür","háus-tür","häustür","häusTür","hÄus-tür","HÄus-Tür","Haut", "Häut"
EndDataSection