![]() |
funktion soll TStringList zurückliefern
Hi !
ich mache mir gerade eine Funktion, die einen String anhand eines Zeichens teilen soll, das funktioniert auch, nur möchte ich, das die Funktion eine TStringList zurückliefert, ist sowas möglich ?? hier der Quellcode:
Delphi-Quellcode:
var Foo: TStringList
{Im FormCreate-Event:} Foo := TStringList.Create; {und im FormDestroy-Event:} Foo.Free {...} procedure SplitString(Str: String; Chr: Char); var newStr,Buffer:String; Schleife: Integer; begin newStr := Str + Chr; if(Pos(Chr,newStr) <> Length(newStr)) then for Schleife := 1 to Length(newStr) do begin if(newStr[Schleife] <> Chr) then Buffer := Buffer + newStr[Schleife] else begin Foo.Add(Buffer); Buffer := ''; end end else Foo.Add(Str); end; |
Re: funktion soll TStringList zurückliefern
Es ist relativ einfach. Du erstellst in deiner Funktion (vielleicht sogar direkt in der Result-Variable) eine Instanz von TStringList, die du dann bearbeitest und zurücklieferst.
Delphi-Quellcode:
procedure SplitString(Str: String; Chr: Char);
var newStr,Buffer:String; Schleife: Integer; Foo: TStringList; begin Foo := TStringList.Create; newStr := Str + Chr; if(Pos(Chr,newStr) <> Length(newStr)) then for Schleife := 1 to Length(newStr) do begin if(newStr[Schleife] <> Chr) then Buffer := Buffer + newStr[Schleife] else begin Foo.Add(Buffer); Buffer := ''; end end else Foo.Add(Str); Result := Foo; end; |
Re: funktion soll TStringList zurückliefern
Ich habe hier einen ziemlich ähnlichen code... etwas älter und weiß momentan nicht ob er korrekt läuft...
Delphi-Quellcode:
function SplitString(WasSuchen,WorinSuchen : String) : TStringList;
var Stelle : integer; begin Result := TStringList.Create; Stelle := 1; if not (Worinsuchen[Length(WorinSuchen)] = WasSuchen) then WorinSuchen := WorinSuchen+WasSuchen; while Length(WorinSuchen) > 0 do if WorinSuchen[stelle] = WasSuchen then begin Result.Add(Copy(WorinSuchen,1,Stelle-1)); WorinSuchen := copy(WorinSuchen,Stelle+1,length(WorinSuchen)); Stelle := 1; end else inc(Stelle); end; |
Re: funktion soll TStringList zurückliefern
vielen dank,
komischer weise hab ich es zuerst auch so probiert, und es ging nicht :gruebel: aber hauptsache jetzt funzt es :mrgreen: nochmal danke :dp: |
Re: funktion soll TStringList zurückliefern
Zitat:
Delphi-Quellcode:
procedure SplitString(const Str: String; Chr: Char; Result: TStrings);
begin with Result do begin Clear; Delimiter := Chr; DelimitedText := Str; end; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin SplitString('abc;123;def;456;ghi;789', ';', Memo1.Lines); end; |
Re: funktion soll TStringList zurückliefern
Und beide Code Beispiele produzieren ein Speicherleck, oder wo gebt ihr eure Stringlisten wieder frei?
|
Re: funktion soll TStringList zurückliefern
Zitat:
|
Re: funktion soll TStringList zurückliefern
das habe ich mich auch schon gefragt, die StringList wird zwar "gemacht", aber nicht mehr freigegeben, hat da jemand eine idee ??
|
Re: funktion soll TStringList zurückliefern
könnte das so gehen ??
Delphi-Quellcode:
with SplitString(Edit1.Text,' ') do
begin for Schleife := 0 to Count - 1 do Ausgabe := Ausgabe + Strings[Schleife] + #13#10; ShowMessage(Ausgabe); Free; end; |
Re: funktion soll TStringList zurückliefern
Zitat:
Wenn wir schon dabei sind wie kann ich denn das result einer function wieder freigeben? Oder geht das nur indirekt? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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