Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String in drei teilen (https://www.delphipraxis.net/159033-string-drei-teilen.html)

fox67 11. Mär 2011 13:05

String in drei teilen
 
ich habe einen string der so aussieht "test|test1|test2" nun will ich daraus 3 strings machen die dann so ausehen "test", "test1", "test2". weiß jeman wie dass funktioniert

mkinzler 11. Mär 2011 13:07

AW: String in drei teilen
 
-StringListe (Delimiter/DelimitedText)
-Delphi-Referenz durchsuchenExplode()

fox67 11. Mär 2011 13:11

AW: String in drei teilen
 
in einem php scribt sieht dass so aus
Code:
 $ausgabe = stripslashes($ausgabe);
   $zerlegen = explode("|", $ausgabe);
wie sieht dass in delphi aus.

mkinzler 11. Mär 2011 13:13

AW: String in drei teilen
 
Lösung per Stringliste
Delphi-Quellcode:
var
  sl: TStrings;
...
begin
  sl := TStringlist.Create;
  sl.Delimiter := '|';
  sl.DelimitedText := 'test|test1|test2';
  ...
  sl.Free;
sl.Strings[0] enthält dann 'test1';

fox67 11. Mär 2011 13:21

AW: String in drei teilen
 
Zitat:

sl.Strings[0] enthält dann 'test1'
nicht 'test'?

scrat1979 11. Mär 2011 13:21

AW: String in drei teilen
 
Entweder eine StringListe wie von mkinzler schon genannt oder Du bastelt Dir eine eigene Funktion:

z.B.

Delphi-Quellcode:
procedure ExplodeString(DelimitedString : String; VAR Part1, Part2, Part3 : String);
begin
  (* Erster Teil *)
  Part1 := copy(DelimitedString, 1, Pos('|', DelimitedString)-1);
  (* Zweite Teil *)
  DelimitedString := Delete(DelimitedString, 1, Pos('|', DelimitedString));
  Part2 := copy(DelimitedString, 1, Pos('|', DelimitedString)-1);
  (* Dritter Teil*)
  Part3 := copy(DelimitedString, Pos('|', DelimitedString)+1, Length(DelimitedString));
end;
Aufruf:

Delphi-Quellcode:
 VAR GanzerString, Teil1, Teil2, Teil3 : String;
 [...]
 GanzerString := 'ErsterTeil|ZweiterTeil|DritterTeil';
 ExplodeString(GanzerString, Teil1, Teil2, Teil3);
 ShowMessage(Teil1);
 ShowMessage(Teil2);
 ShowMessage(Teil3);
end;
[/DELPHI]

... Ungetestet!

aurikel_Max 11. Mär 2011 13:37

AW: String in drei teilen
 
Zitat:

Zitat von fox67 (Beitrag 1087698)
Zitat:

sl.Strings[0] enthält dann 'test1'
nicht 'test'?

sl.Strings[0] enthält 'test', wenn du "test|test1|test2" einliest - er ist wahrs. davon ausgegangen, dass die Teile test1, test2 und test3 heißen. ;)

fox67 11. Mär 2011 13:37

AW: String in drei teilen
 
scrat1979 ich habe dein code mal ausprobiert da der von mkinzler nicht funktioniert hatt aber es kommen folgende fehlermeldungen:
[Error] Unit2.pas(30): Incompatible types: 'String' and 'Integer'
[Error] Unit2.pas(32): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit2.pas'

-187- 11. Mär 2011 13:38

AW: String in drei teilen
 
Wobei die Funktion nicht auf 3 Parts begrenzt sein sollte :)

Schöner wäre eine while-do Schleife und als Result ein dynamisches Array :)

-187- 11. Mär 2011 13:39

AW: String in drei teilen
 
Na wie wäre es mal mit selber testen ?

aurikel_Max 11. Mär 2011 13:41

AW: String in drei teilen
 
Zitat:

Zitat von fox67 (Beitrag 1087703)
scrat1979 ich habe dein code mal ausprobiert da der von mkinzler nicht funktioniert hatt aber es kommen folgende fehlermeldungen:
[Error] Unit2.pas(30): Incompatible types: 'String' and 'Integer'
[Error] Unit2.pas(32): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit2.pas'

Hast du den Code 1:1 übernommen?
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
  sl: TStringlist; // oder auch TStrings
begin
  sl := TStringlist.Create;
  sl.Delimiter := '|';
  sl.DelimitedText := 'test|test1|test2';
  ShowMessage(sl.Strings[0]); // zeigt test an
  sl.Free;
end;
Klappt problemlos.

Sherlock 11. Mär 2011 13:43

AW: String in drei teilen
 
Was funktioniert denn bei mkinzlers Code nicht? Das ist einer der einfachsten drei- bis vierzeiler für Delphi.

Sherlock

mkinzler 11. Mär 2011 13:47

AW: String in drei teilen
 
Früher (ältere Delphiversionen) gab es keine Möglichkeit einen Delimiter zu setzen.

Explode(9 aus der CodeLib sollte aber funktionieren

fox67 11. Mär 2011 13:49

AW: String in drei teilen
 
dass heißst ich muß erst einmal die länge des strings ermittelln und dann eis abziehen kippt es da nich eine einfachere methode

-187- 11. Mär 2011 13:50

AW: String in drei teilen
 
Du solltest allgemein den Umgang mit Pos und Copy lernen. Darauf bauen solche Dinge nunmal auf und du wirst immer wieder vor solchen Problemen stehen.

mkinzler 11. Mär 2011 13:51

AW: String in drei teilen
 
Zitat:

Zitat von fox67 (Beitrag 1087711)
dass heißst ich muß erst einmal die länge des strings ermittelln und dann eis abziehen kippt es da nich eine einfachere methode

(Dynamische) Arrays sind nunmal 0-indiziert

fox67 11. Mär 2011 13:53

AW: String in drei teilen
 
is ja komisch ich habe den code von mkinzler erneut in delphi eingegeben und jetzt funktioniert es plötzlich

Capa 11. Mär 2011 14:12

AW: String in drei teilen
 
nichts für ungut aber ich hab da eher den anschein das dir generell das verständniss
für einige grundfunktionen fehlt, vielleicht mal ein paar kleine tutorials durchlesen
hilft meistens schon enorm.

Ich sag nicht das ich alles kann allerdings kann man viel durch tutorials lernen.
Gibt glaub ich sogar nen thread hier im forum wo verschiedene tutorials aufgelistet
werden.

Wie gesagt ist nciht böse gemeint aber an vielen deiner beiträge merkt man schon das dir
da was fehlt.

Mfg Capa

scrat1979 11. Mär 2011 14:12

AW: String in drei teilen
 
Zitat:

Zitat von -187- (Beitrag 1087704)
Wobei die Funktion nicht auf 3 Parts begrenzt sein sollte :)

Schöner wäre eine while-do Schleife und als Result ein dynamisches Array :)

Du hast ja Recht aber ich denke meine Lösung ist ein guter Ansatz... mehr sollte es auch nicht sein :)

scrat1979 11. Mär 2011 14:14

AW: String in drei teilen
 
Zitat:

Zitat von fox67 (Beitrag 1087703)
scrat1979 ich habe dein code mal ausprobiert da der von mkinzler nicht funktioniert hatt aber es kommen folgende fehlermeldungen:
[Error] Unit2.pas(30): Incompatible types: 'String' and 'Integer'
[Error] Unit2.pas(32): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit2.pas'

hab grad 'nen Fehler gefunden und behoben. Versuch es nochmal...

TonyR 11. Mär 2011 14:19

AW: String in drei teilen
 
Zitat:

Zitat von fox67 (Beitrag 1087703)
scrat1979 ich habe dein code mal ausprobiert da der von mkinzler nicht funktioniert hatt......

funzt doch einwandfrei!?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStrings;
begin
  sl := TStringlist.Create;
  sl.Delimiter := '|';
  sl.DelimitedText := 'test0|test1|test2';
  ShowMessage(sl[0]+'+'+sl[1]+'+'+sl[2]);
  sl.Free;
end;
Edit: getestet mit D2010

Edit2: Sorry, vergesst es, ist ja schon geklärt, ich hatte das Browserfenster ne Weile offen und nicht aktualisiert :D

DeddyH 11. Mär 2011 14:34

AW: String in drei teilen
 
Aber dann bitte so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStrings;
begin
  sl := TStringlist.Create;
  try
    sl.Delimiter := '|';
    sl.StrictDelimiter := true; //erst ab Delphi 2006
    sl.DelimitedText := 'test0|test1|test2';
    ShowMessage(sl[0]+'+'+sl[1]+'+'+sl[2]);
  finally
    sl.Free;
  end;
end;
Bei Delphi-Versionen < 2006 hat man auf diese Weise aber Kummer, da sie StrictDelimiter noch nicht kennen. Das bedeutet, dass dort zusätzlich zum Delimiter auch Leerzeichen als Trenner verwendet werden. In dem Fall muss man sich anders behelfen.


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