AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Effiziente Methode, einen String mittels Delimiter zu splitten
Thema durchsuchen
Ansicht
Themen-Optionen

Effiziente Methode, einen String mittels Delimiter zu splitten

Ein Thema von Codehunter · begonnen am 11. Apr 2018 · letzter Beitrag vom 24. Aug 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 08:14
Delphi-Version: 10.2 Tokyo
Hallo!

Ich kenne mittlerweile ein halbes Dutzend Methoden, einen String anhand eines Delimiter zu splitten. Die meisten arbeiten mit TStringList. Entweder mit DelimitedText, was aber den Nachteil hat dass man nur ein Zeichen (Char) als Delimiter einsetzen kann. Oder mittels SL.Text:= StringReplace(TheString, TheDelimiter, sLineBreak, [rfReplaceAll]); Teilweise habe ich auch schon gesehen, den String mit einer Runner-Schleife zu durchlaufen, Memcopy je Zeichen in einen zweiten String zu machen und beim Auffinden eines Delimiter den zweiten String in eine Stringliste zu adden. Davon gibt es auch noch eine Variante, einen String als PChar anzusprechen, den Zeiger zu schubsen, Memcopy direkt auf StringList.Text zu machen und gefundene Delimiter durch sLineBreak zu ersetzen.

Nur frage ich mich, wie effizient ist denn diese ganze "Schleiferei"? Die meisten dieser Codeschnipsel sind 10 Jahre und älter. Gibt es vielleicht inzwischen in der RTL mitgeliefert schon eine Art Äquivalent zu der explode()-Funktion in PHP, die z.B. ein TStringDynArray auswirft?

Grüße
Cody

EDIT: PS: Schön wäre die Möglichkeit, als Delimiter mehr als ein Zeichen (Char) verwenden zu können.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (11. Apr 2018 um 08:18 Uhr)
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#2

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 08:16
Suchst du sowas?

Delphi-Quellcode:
function Explode(const ADelimiter, AString: string): TArray<string>;
begin
 Result := AString.Split([ADelimiter]);
end;

StrOut := Explode(':;', StrIn);

Geändert von günni0 (11. Apr 2018 um 08:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 08:17
In den neueren Versionen gibt es s.Split (s ist ein String).
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 08:26
Ha, dacht ichs mir doch dass es inzwischen was generisches ab Werk gibt Und dann auch noch so schön flexibel. Schade nur dass die Dokumentation dazu so dünne ist.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#5

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 08:31
Die Funktion SplitString gibt es in StrUtils schon seit D2010.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 08:37
Ich schätze mal dass dies einer dieser Fälle ist, wo das Internet voll ist mit wieder und wieder kopierten und modifizierten Varianten, die aus grauer Ansistring-Vorzeit stammen. Lässt man nämlich - mangels Kenntnis dessen - das Keyword "Split" weg oder verwendet stattdessen "explode" als Suchbegriff, findet man nur die altertümlichen Schleifenlösungen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 08:49
Ha, dacht ichs mir doch dass es inzwischen was generisches ab Werk gibt
Nur als kleiner Hinweis: An der Methode ist nichts "generisch"
Zumindest nicht in dem Sinn wie "generisch" in Delphi bzw. generell in Programmiersprachen benutzt wird.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 08:53
Der Ergebnistyp ist generisch Mehr meinte ich damit eigentlich gar nicht.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 09:07
Hier ein Mini Beispiel wie man es machen könnte:
Delphi-Quellcode:
procedure MySplit (const Delimiter: Char; Input: string; const Strings: TStrings);
begin
  Assert(Assigned(Strings));
  Strings.Clear;
  Strings.Delimiter := Delimiter;
  Strings.DelimitedText := Input;
end;


// Aufruf:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    MySplit(' ', 'Hallo Delphi Praxis', SL);
    ShowMessage(SL[0]); // = Hallo
    ShowMessage(SL[1]); // = Delphi
    ShowMessage(SL[2]); // = Praxis
  finally
    SL.Free;
  end;
end;
Meintest Du so etwas?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Effiziente Methode, einen String mittels Delimiter zu splitten

  Alt 11. Apr 2018, 09:18
Du hast den Eingangsbeitrag gelesen?
Ich kenne mittlerweile ein halbes Dutzend Methoden, einen String anhand eines Delimiter zu splitten. Die meisten arbeiten mit TStringList. Entweder mit DelimitedText, [...]
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:19 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