Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi funktion soll TStringList zurückliefern (https://www.delphipraxis.net/36938-funktion-soll-tstringlist-zurueckliefern.html)

idontwantaname 28. Dez 2004 13:19


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;

Dax 28. Dez 2004 13:26

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;

KLS 28. Dez 2004 13:27

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;

idontwantaname 28. Dez 2004 13:33

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:

Sprint 28. Dez 2004 13:34

Re: funktion soll TStringList zurückliefern
 
Zitat:

Zitat von idontwantaname
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 ??

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;

Luckie 28. Dez 2004 13:35

Re: funktion soll TStringList zurückliefern
 
Und beide Code Beispiele produzieren ein Speicherleck, oder wo gebt ihr eure Stringlisten wieder frei?

Sprint 28. Dez 2004 13:37

Re: funktion soll TStringList zurückliefern
 
Zitat:

Zitat von Luckie
Und beide Code Beispiele produzieren ein Speicherleck, oder wo gebt ihr eure Stringlisten wieder frei?

Mich kannst du nicht gemeint haben...

idontwantaname 28. Dez 2004 13:37

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 ??

idontwantaname 28. Dez 2004 13:40

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;

KLS 28. Dez 2004 13:41

Re: funktion soll TStringList zurückliefern
 
Zitat:

Zitat von Luckie
Und beide Code Beispiele produzieren ein Speicherleck, oder wo gebt ihr eure Stringlisten wieder frei?

Ja schon richtig, programmieren aller M$ halt :)
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 05:27 Uhr.
Seite 1 von 2  1 2      

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