![]() |
Delphi-Version: 10 Seattle
TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Folgender Code gibt mir in 10.0 "4" aus und in 10.3 "5":
Delphi-Quellcode:
Ist das bekannt? Gibts dafür einen guten Grund?
procedure TForm1.FormCreate(Sender: TObject);
var arr: TArray<String>; begin arr := 'a;b;;;'.Split([';']); Caption := IntToStr(Length(arr)); end; |
AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Zitat:
![]() ![]() |
AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Aber warum wird das dann nicht in einem Patch für 10.0 auch behoben?
Im Prinzip muss ich TStringHelper.Split jetzt so behandeln als würde sie nicht existieren, weil sie nicht richtig funktioniert. Und da bin ich Leuten die nicht wissen, dass TStringHelper.Split in 10.0 nicht richtig funktioniert sogar ein Stück voraus, weil ich immerhin keine bösen Überraschungen (mehr) zur Laufzeit erlebe. :roll: Was ist denn das Problem für sowas einen Patch nachzureichen? Gerade wenn in der VCL/RTL solch kritische Fehler enthalten sind, muss das doch auch noch in derselben Version behoben werden! Ich hoffe langsam echt, dass wir in der Firma irgendwann auf C# umsteigen... |
AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Zitat:
Wenn man das gleiche Verhalten in 10.3 herstellen will wie unter 10.0, dann muss der Aufruf
Delphi-Quellcode:
lauten.
arr := 'a;b;;;'.Split([';'], TStringSplitOptions.ExcludeLastEmpty);
|
AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Ja gut, aber wie du ja schon gesagt hast ist das Verhalten in 10.0 ein Bug. Und ich benötige das korrekte Verhalten aus 10.3.
Da bringt mir leider die die Option, dass es in 10.3 auf Wunsch auch verbuggt ist nicht viel :| Von daher denke ich schon, dass in 10.0 das Verhalten von 10.3 hätte nachgepatcht werden soll. Erstens weil es in 10.0 falsch ist und zweitens weil die Methode jetzt nicht abwärtskompatibel ist (worauf Delphi doch normal einen so großen Wert legt). Wenn sie schon den Fehler in 10.0 nicht beheben, dann hätte ich ja wenigstens das alte Verhalten als Default genommen in 10.3. Ich bräuchte in 10.0 das Verhalten wie es in 10.3 (ohne ExcludeLastEmpty) ist. Hab den Code jetzt so umgebaut, dass ich stattdessen mit TStringList + TStringList.Delimiter/StrictDelimiter/DelimitedText splitte. Das funktioniert in beiden Versionen gleich und zusätzlich auch noch korrekt. |
AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Die Release-Info geht auf die Änderungen der RTL an dieser Stelle ein
![]() Zitat:
|
AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Zitat:
Das Verhalten in 10.0 ist trotzdem falsch und die Methode in 10.3 ist trotzdem nicht abwärtskompatibel. Und man kann auch nicht davon ausgehen, dass jeder die Patchnotes jeder (oder zumindest der momentan aktuellen) Version komplett von oben bis unten gelesen und sich behalten hat. |
AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Zitat:
|
AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
Es ist bei Delphi nicht üblich, das stimmt.
Die Frage ist: Sollte es üblich sein? Meiner Meinung nach schon. Aber ich wollte eigentlich gar keine riesige Diskussion über Delphi/Embarcadero/Idera auslösen :duck: Ich denke man merkt, dass ich mittlerweile ziemlich frustriert bin was Delphi angeht... :oops: Kann mir manchmal die Kommentare nicht mehr verkneifen :| Aber lassen wir's gut sein. Viele der Sachen die mich Ärgern sind bei Delphi halt so üblich. Das ist in meinen Augen nichts Positives und auch keine Entschuldigung, aber ich muss mich halt damit abfinden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 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