Was willst du denn erreichen? Tatsächlich steht in der Hilfe nicht ausdrücklich, dass man < und > nicht mit Strings verwenden sollte, doch ja das sollte man keinesfalls tun! Um Strings zu vergleichen gibt es nur = und <> (ungeleich).
Alle anderen Operatoren haben keinen Sinn, da sie sich nicht eindeutig definieren lassen. Mathematische Operationen sowieso nicht, aber bei String1 < String2 könnte man auch Verschiedenstes erwarten: Soll es wahr sein, wenn String 1 kürzer als String2 ist? Wenn String1 alphabetisch vor String2 sortiert würde? usw.
Eventuell kann man als Bug melden, dass der Compiler hier keinen Syntax Error wirft, wie bei binären Operatoren.
Nutze die Passende Funktion:
Willst du die Länge vergleichen nutze Len(String$).
Willst du die alphabetische Sortierung nutze ASC(String$) im Vergleich mit ASC(String2$). Bzw. besser: packe die Strings in eine Liste oder ein Array und nutze die Sortierfunktion von Purebasic SortList().
Ich denke schon, daß solche String-Vergleiche nötig sind, z.B. um eine bestimmte Zeile in einer sortierten Liste sehr schnell zu finden.
Auf das Problem beim String-Vergleich bin ich gestoßen, als ich ein Programm von Windows auf Linux portiert habe.
Im Prinzip habe ich ein Programm geschrieben, das eine Sortierfunktion für sehr große Wörterlisten enthält. Normales sortieren mit den PB-Funktionen ist sehr langsam und man sieht keinen Fortschritt. Deswegen teile ich die große Wörterliste in kleinere Häppchen. Die werden sortiert und temporär gespeichrt.
Anschließend werden alle Teile parallel verarbeitet. Ich hole aus jeder Datei ein Wort, das kleinste davon wird gespeichert an der stelle das nächste Wort geholt. Wenn das Ende eines Teils erreicht ist, schreibe ich meine Schluß-Markierung statt eines Wortes. Dieses Zeichen muß größer sein als jedes Word. Deshalb habe ich das größte Unicodezeichen gewählt. Dabei bin ich auf diesen Fehler gestoßen.
Ich habe jetzt einfach ein anderes Zeichen gewählt ($7FFF).
Also in der PureBasic Dokumentation steht bei den Operatoren < und > tatsächlich, dass diese beim Vergleich von Strings case-sensitive sind, also nach Character-Code verglichen wird.
Ob man das nun nutzen möchte bleibt jedem selbst überlassen.
Diese Inkonsistenz sollte aber unter Linux behoben werden.
Allerdings gebe ich auch zu bedenken, dass $FFFF kein gültiges Zeichen ist. Im Unicode-Standard, werden $FFFF, $FFFE und $FEFF zur Unterscheidung von Little und Big-Endian genutzt.
Du kannst $FFFD nutzen.
STARGÅTE hat geschrieben: 10.04.2025 18:51
Also in der PureBasic Dokumentation steht bei den Operatoren < und > tatsächlich, dass diese beim Vergleich von Strings case-sensitive sind, also nach Character-Code verglichen wird.
Interessehalber: Wo?
Bei Variablen, Typen und Operatoren wo ich geschaut habe steht im Deutschen nur folgendes:
Aber ja, falls das vermerkt ist, dann sollte das Verhalten natürlich konsistent sein.
Danke, dann gibt es wohl noch einen Dokumentationsbug. Melde ich morgen.
Ich habe mir gerade nochmal die aktuelle Beta heruntergeladen und (zumindest unter Linux) ist es in der Hilfe im Editor im entsprechenden Kapitel nicht erwähnt, auch nicht auf Englisch. Die deutsche Onlinehilfe hingegen erwähnt es auch.
Die meisten Sprachen unterstützen diese Stringvergleiche, und tatsächlich nutze ich das in PB seit Jahren.
Es ist praktisch, wenn man z.B. aus Versionsstrings nicht erst umständlich valide Zahlen herstellen möchte, z.B.: