AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi String.Split Methode Delimiter mehrmals vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

String.Split Methode Delimiter mehrmals vorhanden

Ein Thema von SyntaxXx · begonnen am 19. Aug 2014 · letzter Beitrag vom 21. Aug 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: String.Split Methode Delimiter mehrmals vorhanden

  Alt 19. Aug 2014, 19:26
Jupp, Pos und dann mit Copy den gewünschten Teil rauskopieren, wäre besser.
Split macht nunmal das, wofür es gemacht wurde. -> an allen Delimitern aufteilen.
Ansonsten bräuchte man kein dynamisches Array, als Result, sondern nur 2 Strings.

Oder erstmal mit einem StringReplace das erste Komma durch ein neues/anderes Zeichen ersetzen, welches man dann als Delimiter verwendet.

such mit Pos() die erste Position des Trenners und hol dir mit Copy() die beiden Strings
Ich würde es nur etwas anders ausdrücken, also "such mit Pos() die Position des ersten Trenners ...", aber kommt praktisch auf's Gleiche raus.



PS: Delphi-Referenz durchsuchenGetShortHint und Delphi-Referenz durchsuchenGetLongHint machen fast sowas, wie du es suchst, allergdings mit einem "|" (Pipe) als Delimiter.
Es gibt nur einen Unterschied beim Verhalten, wenn kein Delimiter vorhanden ist.

Und wenn es mehrere solcher Strings gibt, dann könnte man eventuell auch das Names&Values des TStrings benutzen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Aug 2014 um 19:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: String.Split Methode Delimiter mehrmals vorhanden

  Alt 19. Aug 2014, 21:33
Also bei XE6 gibt es ein Overload für Split, dem man einen Count mitgeben kann:

meinString.Split([','], 1)[1];

Wenn XE4 das nicht hat, dann muss ich mich also korrigieren: es ist nicht die falsche Methode, sondern eine zu alte Delphi-Version.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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
 
#3

AW: String.Split Methode Delimiter mehrmals vorhanden

  Alt 19. Aug 2014, 23:11
Also bei XE6 gibt es ein Overload für Split, dem man einen Count mitgeben kann:

meinString.Split([','], 1)[1]; Wenn XE4 das nicht hat, dann muss ich mich also korrigieren: es ist nicht die falsche Methode, sondern eine zu alte Delphi-Version.
Nein, es ist und bleibt die falsche Methode ... egal wie alt die Delphi-Version ist, denn ohne die Angabe des Parameters, wird die falsche Methode benutzt.

Wenn es in älteren Delphi-Versionen diese Überladung nicht gibt, dann wird die falsche Methode doch nicht richtiger, sondern bleibt genauso falsch, es fehlt nur die Alternative mit der richtigen Methode
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)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: String.Split Methode Delimiter mehrmals vorhanden

  Alt 20. Aug 2014, 07:11
Bei Ausgrabungen habe ich das hier gefunden. Ich habe mir so eine Funktion für meine ersten Gehversuche mit 15 Jahren unter Rocky Mountain Basic (HP9845) geschrieben. Es macht genau das, was u.A. himitsu vorgeschlagen hat.
Delphi-Quellcode:
Function Split(Var S: String; Del: String): String;
Var
  p: Integer;

Begin
  p := pos(Del, S);
  If p = 0 Then Begin
    Result := s;
    s := '';
  End
  Else Begin
    Result := Copy(s, 1, p - 1);
    s := Copy(s, p + length(Del), length(s));
  End;
End;
Damit kann man -allerdings ziemlich unperformant- einen String sukzessive in seine Bestandteile zerlegen:
Delphi-Quellcode:
var
  s : String;

begin
  s:='Das,ist,ein,Satz,mit,Komma';
  while s<>'do writeln(Split(s,','));
End;
Nach dem ersten Aufruf stände in 'S' allerdings das vom TE gewünschte Ergebnis.

Und: Ja, ich werde mich mit Emba mal über den Methodennamen 'Split' ernsthaft unterhalten müssen. Ich war zuerst da, von wegen prior Art und so
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:10 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