Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich (https://www.delphipraxis.net/199911-tstringhelper-split-ist-10-0-und-10-3-unterschiedlich.html)

Neutral General 1. Mär 2019 11:15

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:
procedure TForm1.FormCreate(Sender: TObject);
var arr: TArray<String>;
begin
  arr := 'a;b;;;'.Split([';']);
  Caption := IntToStr(Length(arr));
end;
Ist das bekannt? Gibts dafür einen guten Grund?

Uwe Raabe 1. Mär 2019 11:46

AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
 
Zitat:

Zitat von Neutral General (Beitrag 1426715)
Gibts dafür einen guten Grund?

Hängt vielleicht mit der neuen TStringSplitOption ExcludeLastEmpty zusammen. Ab Rio kann man dieses Verhalten steuern, während es davor implizit so gehandhabt wurde (was faktisch ein Bug war, da der letzte Eintrag unterschlagen wurde, obwohl ExcludeEmtpy nicht angegeben war).

https://quality.embarcadero.com/browse/RSP-20772
https://quality.embarcadero.com/browse/RSP-11302

Neutral General 1. Mär 2019 12:14

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...

Uwe Raabe 1. Mär 2019 15:15

AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
 
Zitat:

Zitat von Neutral General (Beitrag 1426725)
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.

Nein, denn dafür wurde die neue Option ja eingeführt.

Wenn man das gleiche Verhalten in 10.3 herstellen will wie unter 10.0, dann muss der Aufruf
Delphi-Quellcode:
arr := 'a;b;;;'.Split([';'], TStringSplitOptions.ExcludeLastEmpty);
lauten.

Neutral General 1. Mär 2019 15:32

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.

Bernhard Geyer 1. Mär 2019 15:50

AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
 
Die Release-Info geht auf die Änderungen der RTL an dieser Stelle ein

http://docwiki.embarcadero.com/RADSt.../de/Neuerungen

Zitat:

Weitere Änderungen für die RTL

TStringHelper.Split liefert jetzt die gleichen Ergebnisse wie die globale Funktion aus StrUtils.
...
Die Methode TStringHelper.Split verfügt über ein geändertes optionales Verhalten basierend auf der neuen Option TStringSplitOptions.ExcludeLastEmpty.
Manchmal sollte man doch die bereitgestellten Infos lesen:gruebel:

Neutral General 1. Mär 2019 15:58

AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1426760)
Manchmal sollte man doch die bereitgestellten Infos lesen:gruebel:

Okay, es ist zumindest dokumentiert. Aber das macht es unterm Stricht nicht (viel) besser, oder?
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.

Uwe Raabe 1. Mär 2019 16:26

AW: TStringHelper.Split ist in 10.0 und 10.3 unterschiedlich
 
Zitat:

Zitat von Neutral General (Beitrag 1426759)
Von daher denke ich schon, dass in 10.0 das Verhalten von 10.3 hätte nachgepatcht werden soll.

Ich kann mich nur an ein bzw. zwei Back-Patches zu XE6, XE7 und XE8 nach Erscheinen von Delphi 10 Seattle erinnern, die im Rahmen der Subscription verteilt wurden. Danach wurde dieser Service offenbar stillschweigend wieder eingestellt. Backports von Bugfixes sind bei Delphi also in der Regel nicht zu erwarten. Ich sehe jetzt nicht, wieso das gerade bei diesem Bug anders sein sollte.

Neutral General 1. Mär 2019 16:54

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 00:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz