Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String zerlegen; Trenner (https://www.delphipraxis.net/102107-string-zerlegen%3B-trenner.html)

quendolineDD 23. Okt 2007 16:47

Re: String zerlegen; Trenner
 
Delphi-Quellcode:
function cuttext(AString: string; delimiter: Char):array of string
var i: integer;
begin
setlength(result, 0);
i := 0;
while (pos(delimiter, astring) <> 0)then
 begin
    setlength(result, i+1);
    result[i] := copy(astring, 0, pos(delimiter, astring)-1);
    delete(astring, 1, pos(delimiter, astring));
    inc(i);
 end;
end;
Das dürfte doch deinem gewünschten sehr nahe kommen ;)
Code ungetestet, habe den nur schnell hier geschrieben!

EDIT:

Habe die Boolean rausgenommen, ich glaub die Abfrage nach dem Trennzeichen düfte genügen

Neutral General 23. Okt 2007 16:50

Re: String zerlegen; Trenner
 
Hi,

Hab mal was gebaut. Hab mich bisschen an der VCL Orientiert aber passt schon ;)

Delphi-Quellcode:
interface

uses ...;

type
  TStringlist = class(Classes.TStringlist)
  private
    FDelText: String;
    procedure SetDelimitedText(const Value: String);
  public
    property DelimitedText: String read FDelText write SetDelimitedText;
  end;

implementation

procedure TStringlist.SetDelimitedText(const Value: String);
var P,tmp: PChar;
    S: String;
begin
  FDelText := Value;
  BeginUpdate;
    Clear;
    P := PChar(Value);
    while P^ <> #0 do
    begin
      tmp := P;
      while (P^ >= ' ') and (P^ <> Delimiter) do // >= ist wichtig.. Im Original ists nur >
        inc(p);
      SetString(S,tmp,P-tmp);
      Add(S);
      inc(p);
    end;
  EndUpdate;
end;

// Anwendung

procedure TForm1.Button1Click(Sender: TObject);
var S: TStringlist;
begin
  S := TStringlist.Create;
  try
    S.Delimiter := ';';
    S.DelimitedText := 'Ich;schreibe was;hier hin;!!!';
    Memo1.Text := S.Text;
  finally
    S.Free;
  end;
end;
Gruß
Neutral General

KPBecker 23. Okt 2007 16:55

Re: String zerlegen; Trenner
 
Vielen Dank an die Helfer,

Ähnliches habe ich in einem anderen Programm, als ich von 'delimitedText' noch nichts wußte, auch schon als Lösung geschrieben.
Ich hoffte, daß eine eingebaute Funktion eine einfache Möglichkeit wäre.

Klaus-Peter

KPBecker 23. Okt 2007 17:00

Re: String zerlegen; Trenner
 
Den Vorschlag des neutralen Generals werde ich mir auch noch einmal unter dem Aspekt "praktisches Beispiel für Modifikation einer Funktion" anschauen.

3_of_8 23. Okt 2007 17:03

Re: String zerlegen; Trenner
 
Wir haben doch jede Menge solcher Funktionen in der CL...

Eine einfache Suche hätte genügt.

shmia 23. Okt 2007 17:07

Re: String zerlegen; Trenner
 
Wenn man eine wasserdichte Lösung braucht, um CSV-Dateien zu lesen:
CSV Hilfsfunktionen
Damit darf dann auch das Trennzeichen in den Nutzdaten enthalten sein.

KPBecker 23. Okt 2007 17:10

Re: String zerlegen; Trenner
 
Hallo, Manuel,

die Frage war ja gerade nicht, wie oft schon jemand solche Funktionen selbst geschrieben hat. Das habe ich bei der Suche gesehen.

Die Frage war nach einer Delphi-eigenen Funktion (die aber auch funktionieren sollte).

Klaus-Peter

KrasserChecker 23. Okt 2007 17:14

Re: String zerlegen; Trenner
 
Ich frage mich ja, warum immer alles so umständlich sein muß :gruebel:
Es geht doch nur darum, einen Text der an allen Vorkommen von ; aufzutrennen.
Da die Stringliste hier ja tatsächlich nicht so recht mit "DelimitedText" funktioniert machen wir es doch einfach(!) selbst:
Delphi-Quellcode:
procedure SplitString(iTextToSplit: string; iDelimiter: Char; ioSL: TStrings);
begin
  ioSL.Clear;

  ioSL.Text := StringReplace(iTextToSplit, iDelimiter, sLineBreak, [rfReplaceAll]);
end;

marabu 23. Okt 2007 17:40

Re: String zerlegen; Trenner
 
Hallo Klaus-Peter,

lies dir mal die Online-Hilfe zur Eigenschaft StrictDelimiter durch - das könnte deinen Vorstellungen entsprechen.

Grüße vom marabu

Muetze1 23. Okt 2007 18:11

Re: String zerlegen; Trenner
 
Zitat:

Zitat von Phoenix
Aber das geht glaub ich erst seit Delphi 5.

Nur der Vollständigkeit halber: ab Delphi 6 verfügbar. Delphi 5's TStringList hatte keine DelimitedText oder Delimiter Eigenschaft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.
Seite 2 von 3     12 3      

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