![]() |
Byte-Suche, String-Vergleich mit A>B, A<B und A=B
Hallo,
kann es sein das es Einschränkungen gibt, wenn man zwei Strings mit <, > und = vergleicht? Ich habe mir eine Routine zur "Byte-Suche in TStringList" geschrieben, wo genau das gemacht wird. Es werden aber nicht immer die Einträge gefunden, weil der Vergleich manchmal in die falsche Richtung verzweigt, sobald andere Zeichen in den Einträgen vorkommen als Buchstaben und Zahlen. (z.B _,!,# oder ähnlich )
Delphi-Quellcode:
// strlData.Sort = True!
procedure GetKeyStrPositionInList(strKey:string; strlData:TStringList; var intPosStart:Integer); var intL,intR: Integer; bolFound: Boolean; begin intL := 0; intR := Pred(strlData.Count); intPosStop := -1; bolFound := False; while (intL <= intR) and not bolFound do begin intPosStart := Round( (intL+intR) / 2); strData := UpperCase(CsvCtrl.GetStrFromColumn(0, strlData[intPosList])); if strKey < strData then intR := intPosStart - 1; if strKey > strData then intL := intPosStart + 1; if strKey = strData then bolFound := True; end; if not bolFound then intPosStart := -1; end; |
AW: Byte-Suche, String-Vergleich mit A>B, A<B und A=B
Versuch mal AnsiUpperCase anstatt UpperCase.
|
AW: Byte-Suche, String-Vergleich mit A>B, A<B und A=B
Ich hatte neulich auch Probleme mit sortierten StringListen und Zeichen wie "-". Der Punkt ist wohl, dass Funktionen wie AnsiCompareText standardmäßig etwas mehr machen als erwartet:
![]() U.a. werden Bindestriche bei der Sortierung damit nicht berücksichtigt. Probier mal, deine Stringvergleiche (aktuell mit <, >, =) durch AnsiCompareText zu ersetzen. Dann sollte dein Vergleich für die binäre Suche mit dem Vergleich übereinstimmen, der für die Sortierung verwendet wird. |
AW: Byte-Suche, String-Vergleich mit A>B, A<B und A=B
|
AW: Byte-Suche, String-Vergleich mit A>B, A<B und A=B
Danke für alle Antworten!
Zitat:
Jetzt habe ich in der Beschreibung zu AnsiCompareText gelesen das es "Länderspezifisch" ist. Dachte mir, dann nehme ich doch lieber CompareText aber das funktioniert hingegen wieder nicht! Wie kann ich nun sicherstellen das eine auf meinem PC sortierte Liste auf ALLEN Systemen gleich sortiert bleibt und die Routine dann auf ALLEN PC's das richtige Ergebnis liefert? Das mir so eine einfache Sache, mir solche Sorgen bereiten wird, hätte ich auch nicht erwartet. :) |
AW: Byte-Suche, String-Vergleich mit A>B, A<B und A=B
Zitat:
Wenn du die Liste zur Laufzeit sortierst (und nicht z.B. aus einer Textdatei lädst und implizit annimmst, dass sie dann sortiert ist), dann sollte der Code mit AnsiCompareXXX überall funktionieren. Allerdings ist die Sortierung ggf. anders - aber davon merkst du bei der Suche nichts. Wenn du die Sortierung länderunabhängig immer gleich haben willst, dann musst du deine eigene Sortierfunktion schreiben, bzw. eine eigene Compare-Funktion, die du dann mit CustomSort verwendest. Und diese Compare-Funktion musst du dann auch in der Binärsuche nutzen. |
AW: Byte-Suche, String-Vergleich mit A>B, A<B und A=B
Vielen Dank! :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz