AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

XE2: Evtl. Splitstring bug bei CRLF?

Ein Thema von alleinherrscher · begonnen am 21. Okt 2013 · letzter Beitrag vom 21. Okt 2013
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:09
Delphi-Version: XE2
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher (21. Okt 2013 um 10:13 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:17
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

Geändert von Der schöne Günther (21. Okt 2013 um 10:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:21
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.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:23
Die Funktion arbeitet so wie beschreiben (nicht so wie von dir erwartet)

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 SplitString( str, ',;' ); würde also die folgenden Zeichenketten gleich trennen:
Code:
1,2,3
1;2;3
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (21. Okt 2013 um 10:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#5

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:24
Die Funktion arbeitet so wie beschreiben (nicht so wie von dir erwartet)
...in die Ecke geh und schäm. Das hätte ich auch vorher selber in der Hilfe nachsehen können. DANKE!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:33
Die Funktion arbeitet so wie beschreiben (nicht so wie von dir erwartet)

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!?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:37
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, ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#8

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:44
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Okt 2013 um 10:49 Uhr)
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#9

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 10:45

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.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#10

AW: XE2: Evtl. Splitstring bug bei CRLF?

  Alt 21. Okt 2013, 11:03
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 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