Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String anhand eines Zeichens trennen (https://www.delphipraxis.net/77216-string-anhand-eines-zeichens-trennen.html)

ThE_-_BliZZarD 16. Sep 2006 13:49


String anhand eines Zeichens trennen
 
Ich hab schon überall gesucht, aber irgendwie nichts gefunden was ich brauchen kann..

Ich möchte einen String anhand eines Zeichens trennen, also z.B. das aus dem String "Hallo|Tschüß"
zwei Variablen entstehen, in der ersten steht dann "Hallo", und in der zweiten "Tschüß".
Als Trennzeichen hat dabei das "|" gedient. In PHP würde das so in etwa gehen:
Code:
list($teil1, $teil2) = explode("|", "Hallo|Tschüß");
Leider ist mir Delphi nicht so geläufig wie PHP, so wäre ich sehr dankbar wenn jemand das Codebeispiel mal in Delphi machen könnte..

DANKE

Dax 16. Sep 2006 13:50

Re: String anhand eines Zeichens trennen
 
explodeexplode

inherited 16. Sep 2006 13:52

Re: String anhand eines Zeichens trennen
 
Delphi-Quellcode:
  str1:=Copy(deinstr, 1, pos('|', deinstr)-1);
  str2:=Copy(deinstr, pos('|', deinstr)+1, length(deinstr));

3_of_8 16. Sep 2006 13:59

Re: String anhand eines Zeichens trennen
 
Wenn man mehr als 2 Teile hat, wird das nicht funktionieren. Dann müsste man mit ner Schleife und PosEx arbeiten.

ThE_-_BliZZarD 16. Sep 2006 14:04

Re: String anhand eines Zeichens trennen
 
danke für die schnelle antwort, ich habe jetzt durch den Link zu explode noch was gefunden, nähmlich das hier:

Delphi-Quellcode:
// Explode trennt S in die durch Separator getrennten Elemente auf. Wenn Limit
// > 0 ist, so werden max. Limit Elemente getrennt, wobei im letzen Element
// die Restzeichenkette steht.

function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then Exit;
  if Separator = '' then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := AnsiStrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5);
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index);
end;
Allerdings habe ich damit noch ein Problem, nämlich das ich eine Fehlermeldung bekomme, das der Typ TStringDynArray undefiniert sei. Als Hilfe stand noch unter dem Post das man
das hier definieren sollte:

Delphi-Quellcode:
type TSTringdynarray = array of String;
Allerdings weiß ich nicht so genau wo das hin muss, bin leider noch recht neu in der Sprache,
nochmal DANKE für die Hilfe! :-D

3_of_8 16. Sep 2006 14:08

Re: String anhand eines Zeichens trennen
 
Na oben im interface-Abschnitt. Gleich nach dem uses-Zeugs.

inherited 16. Sep 2006 14:41

Re: String anhand eines Zeichens trennen
 
Zitat:

Zitat von 3_of_8
Wenn man mehr als 2 Teile hat, wird das nicht funktionieren. Dann müsste man mit ner Schleife und PosEx arbeiten.

Ist schon klar, da er aber nur einen Seperator hat, ist das in seinem fall die schnellere Variante

Alexander Roth 16. Sep 2006 14:49

Re: String anhand eines Zeichens trennen
 
Die Frage hatten wir schon oft und ich kenne 3 Beitrage die sei mit gutem Code lösen (Ein Beitrag von mir :dance: :mrgreen: ):

http://www.delphipraxis.net/internal...939&highlight=
http://www.delphipraxis.net/internal...ct.php?t=72330
http://www.delphipraxis.net/internal...816&highlight=

Gruß Alexander


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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