Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi XE2: Evtl. Splitstring bug bei CRLF? (https://www.delphipraxis.net/177156-xe2-evtl-splitstring-bug-bei-crlf.html)

alleinherrscher 21. Okt 2013 10:09

Delphi-Version: XE2

XE2: Evtl. Splitstring bug bei CRLF?
 
Hi@all.

Könnt ihr mir mal schreiben, was bei euch rauskommt, wenn ihr folgende Befehle eintippselt:

Delphi-Quellcode:
 
uses StrUtils, Types;
//[...]
var lines:TstringDynArray;
    str:string;
//[...]
str:='a'+#13#10+'b';
lines:=SplitString(str,#13#10);
Mein Ergebnis (XE2) ist:

lines[0]='a';
lines[1]='';
lines[2]='b';

Hab ich gerade nen Denkfehler? Meiner Meinung nach sollte lines[1]='' nicht existieren, oder?

Gruß, Michael

Der schöne Günther 21. Okt 2013 10:17

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Hat das denn mit dem Zeilenumbruch überhaupt etwas zu tun?

Interessanterweise ergibt sich für mich auch ['a', '', 'b'] wenn man #10#13 in beiden Fällen durch 'xy' ersetzt:

Delphi-Quellcode:
   str:='a'+'xy'+'b';
   lines:=SplitString(str,'xy');

   for str in lines do
      if str.IsEmpty() then
         ShowMessage('LEER')
      else
         ShowMessage(str)
      ;

Übrigens: Bei der Methode "Split" von TStringHelper passiert diese "Anomalie" nicht:
http://docwiki.embarcadero.com/Libra....TStringHelper


Noch nicht in XE2 vorhanden

alleinherrscher 21. Okt 2013 10:21

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Hast recht, hat nichts mit CRLF zu tun: wenn dein Delimiter 3 anstatt 2 Zeichen hat, gibts 2 leere Array Einträge, also Vermutung: Es gibt immer length(Delimiter)-1 leere Array Einträge. WARUM?

Die Variable in SplitString heißt Delimiters, d.h. wohl, dass er jedes Zeichen einzeln zum splitten benutzt.

Sir Rufo 21. Okt 2013 10:23

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Die Funktion arbeitet so wie beschreiben (nicht so wie von dir erwartet) :stupid:

Zitat:

Teilt einen String in verschiedene Teile auf, die durch das angegebene Zeichen voneinander getrennt sind.
SplitString teilt einen String in verschiedene Teile auf, die durch das angegebene Zeichen voneinander getrennt sind. S ist der String, der aufgeteilt werden soll. Delimiters ist ein String, der die als Trennzeichen definierten Zeichen enthält.
Die Funktion Delphi-Referenz durchsuchenSystem.StrUtils.SplitString berücksichtigt jedes Zeichen als einzelnes Trennzeichen.

Der Aufruf von
Delphi-Quellcode:
SplitString( str, ',;' );
würde also die folgenden Zeichenketten gleich trennen:
Code:
1,2,3
1;2;3

alleinherrscher 21. Okt 2013 10:24

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1232598)
Die Funktion arbeitet so wie beschreiben (nicht so wie von dir erwartet) :stupid:

...in die Ecke geh und schäm. Das hätte ich auch vorher selber in der Hilfe nachsehen können. :oops: DANKE!:lol:

gammatester 21. Okt 2013 10:33

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1232598)
Die Funktion arbeitet so wie beschreiben (nicht so wie von dir erwartet) :stupid:

Zitat:

SplitString teilt einen String in verschiedene Teile auf, die durch das angegebene Zeichen voneinander getrennt sind. S ist der String, der aufgeteilt werden soll. Delimiters ist ein String, der die als Trennzeichen definierten Zeichen enthält.

Was denn nun: das oder die Zeichen? :? Ist das vielleicht wiedermal typisch für die (deutsche?) Hilfe!?

Der schöne Günther 21. Okt 2013 10:37

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Ein String ... die Zeichen enthält.

Die englische Hilfe ist da zum Glück genauso:
Zitat:

S is the string to be split. Delimiters is a string containing the characters defined as delimiters.

Die Verwirrung ist vielleicht auch der Grund warum das später geändert wurde: Die ganzen Split-Methoden haben ein halbes Dutzend verschiedene Überladungen: Einmal gibt man ein Array of Char als Delimeter an, alternativ ein Array of String, oder nur einen Char, oder nur einen String, ...

himitsu 21. Okt 2013 10:44

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Zitat:

Zitat von gammatester (Beitrag 1232602)
Was denn nun: das oder die Zeichen? :? Ist das vielleicht wiedermal typisch für die (deutsche?) Hilfe!?

Die?

Zitat:

Delimiters ist ein String, der die als Trennzeichen definierten Zeichen enthält.
Und nicht
Zitat:

Delimiter ist ein String, der das als Trennzeichen definierte Zeichen enthält.
Wobei Zeichen hier ein Char wäre, also würde es auch noch Zeichenfolge, anstatt Zeichen heißen.
siehe TStrings.Delimiter

Mikkey 21. Okt 2013 10:45

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1232603)

Die englische Hilfe ist da zum Glück genauso:
Zitat:

S is the string to be split. Delimiters is a string containing the characters defined as delimiters.

Ich weiß nicht, was Ihr wollt. Wenn der String als Teiler dienen würde, würde die Hilfe das auch so schreiben:

Zitat:

Delimiters is a string to be used as delimiter.
bzw.

Zitat:

Delimiters ist ein String, der als trennende Zeichenfolge verwendet wird.

gammatester 21. Okt 2013 11:03

AW: XE2: Evtl. Splitstring bug bei CRLF?
 
Meine Verwirrung kam wegen dieses Widerspruches: Zunächst
Zitat:

Teilt einen String in verschiedene Teile auf, die durch das angegebene Zeichen voneinander getrennt sind.
und dann
Zitat:

Delimiters ist ein String, der die als Trennzeichen definierten Zeichen enthält.
Also zunächst 1 (in Worten EINS) Trennzeichen und dann auf einmal ein ganzes Rudel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Seite 1 von 2  1 2      

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