AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Inhalt TStringList in andere TStringList kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Inhalt TStringList in andere TStringList kopieren

Ein Thema von Ferox · begonnen am 1. Jul 2009 · letzter Beitrag vom 25. Jun 2015
Antwort Antwort
Seite 2 von 2     12   
Antonov

Registriert seit: 11. Apr 2014
21 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 12:07
Das mit der Groß-Kleinschreibung muss mir nicht gefallen, aber Recht hast du schon. Ist wie in Physik mit den Einheiten oder Beschriftungen. Ohne sie versinkt man im Chaos.

Das mit Result:= TStringlist.Create ist mir ziemlich neu, ich habe noch nicht gesehen, dass man sie erst deklarieren muss. Andere Funktionen von mir kommen ohne diese Deklaration aus.
Und ich möchte den Inhalt einer Stringliste kopieren, und nicht nur einen Zeiger oder auf sie referenzieren. Lustigerweise macht man nicht Result.Free; am Ende, obwohl man die Liste kreeiert hat. Hm.

p.s. Das mit Try Finally habe ich erst seit kurzem gelernt und habe es in diesem Relikt von Programm noch nicht ... Betonung auf "noch"
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 12:08
Zitat:
Lustigerweise macht man nicht Result.Free; am Ende, obwohl man die Liste kreeiert hat. Hm.
Du willst diese ja auch zurückgeben und nicht nur ein Nil
Markus Kinzler
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#13

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 12:27
Das mit Result:= TStringlist.Create ist mir ziemlich neu...
Wieder was gelernt

Wenn du nur eine 08/15 Variable zurück geben willst, wie String oder Integer, das sind keine Objekte, da musst du ja auch nicht machen. Wenn es eine String-Funktion ist, dann ist Result eben ein String. Anders sieht es aber aus wenn die Funktion ein Objekt ist. In dem Fall muss man das Objekt erst erzeugen (und den Speicher reservieren). Ohne das hast du nur eine Adresse, im Grunde ein Integer, aber keinen reservierten Speicher. Das Ergebnis ist ein Error.

Das Result.Free habe ich nicht vergessen. Das findet sich in der anderen Prozedur (siehe slResult.Free; ). Man kann Objekte auch über mehrere Prozeduren verteilen. Nur darf man nicht vergessen es frei zu geben.

Ansonsten macht AddStrings das wofür es gedacht ist: es fügt die Liste von einer TStringList an eine andere an. Man kann es aber auch zum Kopieren "missbrauchen".
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#14

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 13:24
Hallöle...

mal ein wenig Lesestoff zum Thema: Objektinstanzen als Rückgabewert von Functionen und warum man das nicht tun sollte.
http://www.detlef-heibing.de/program...rueckgabe.html
http://forum.delphi-treff.de/index.p...-von-Funktion/

Grundsatz:
Wer erzeugt, gibt frei.
Ausnahme:
Wenn aus dem Funktionsnamen hervorgeht das ein Objekt erzeugt wird. function CreateBlubbList: TSTringlist; Diese Funktion macht dann auch nix anderes als das Objekt zur Verfügung zu stellen. Damit wird deutlich das ich mich selbst um die Freigabe des Objektes kümmern muß. Man darf nicht nur an sich denken sondern auch an den der die Funktion ggf. mal verwendet.

Geändert von haentschman (25. Jun 2015 um 13:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#15

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 13:32
Bitte lass das!
Grundsatz:
Wer erzeugt, gibt frei.
Die Konsequenz hiervon ist es, die benötigte Liste als Parameter an eine Procedure zu übergeben. Aus eigener Erfahrung weiß ich, das Funktionsergebnisse manchmal anfangen ein Eigenleben zu führen.
Also nicht
Persliste:=HolePersliste; Sondern
Delphi-Quellcode:

persliste:=TStringlist.Create;
FuellePersliste(persliste);
..
persliste.Free;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
FarAndBeyond
(Gast)

n/a Beiträge
 
#16

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 13:34
Ich würde in Verbindung mit TStringlisten immer FreeAndNil verwenden.

FreeAndNil(stringlist_xyz);
oder
stringlist_xyz.Free;
stringlist_xyz := Nil;

Dann kann man auch ohne Probleme Assign benutzen wenn man's braucht...
Und wann immer möglich mit Nil initialisieren...


Gruß
Martin
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#17

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 13:41
[...] Man darf nicht nur an sich denken sondern auch an den der die Funktion ggf. mal verwendet.
"Code as if the next guy to maintain your code is a homicidal maniac who knows where you live."
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#18

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 13:47
Die Konsequenz hiervon ist es, die benötigte Liste als Parameter an eine Procedure zu übergeben. Aus eigener Erfahrung weiß ich, das Funktionsergebnisse manchmal anfangen ein Eigenleben zu führen.
Ein in C++ übliches Muster ist es, die Referenz auch wieder zurückzugeben. Das macht den Datenfluss schön sichtbar.

Delphi-Quellcode:
persliste := FuellePersliste(TStringlist.Create);
..
persliste.Free;
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 13:58
Ich sehe es so wie haenschman. Wer erzeugt gibt frei.

Allerdings gibt es auch Fälle, bei denen ich in einer Funktion ein Objekt erzeuge und dann bestimmte Parameter setzte.

Anstatt eine sortierte Stringliste herkömmlich zu erzeugen:

Delphi-Quellcode:
lStringlist:=TStringlist.create;
lStringlist.sorted:=true;
lStringlist.duplicates = dupIgnore;
mache ich mir eine Funktion

Delphi-Quellcode:
function TStringlistSortedCreate:TStringlist;
begin
  result:=TStringlist.create;
  result.sorted:=true;
  result.duplicates = dupIgnore;
end;
Verwendet wird es so:

  lStringlist:=TStringlistSortedCreate;
Wie gesagt. Nur ein Kurzes Beispiel um aus drei Zeilen eine Zeile zu machen.

Finde ich ganz angenehm.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#20

AW: Inhalt TStringList in andere TStringList kopieren

  Alt 25. Jun 2015, 14:23
Eine Funktion die als Result ein Objekt zurück gibt ist ja schön und manchmal gibt es keine andere Möglichkeit, aber das muss man immer zu gut aufpassen, nichts zu vergessen.

Ich persönlich favorisiere diese Methode. Da wird nichts verteilt:
Delphi-Quellcode:
procedure MachWas(Bmp: TBitmap);
begin
  Bmp.Canvas.Brush.Color := clRed;
  Bmp.Width := 400;
  Bmp.Height := 200;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    MachWas(Bmp);
    Canvas.Draw(10, 10, Bmp);
  finally
    Bmp.Free;
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.
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