Datein

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Datein

Beitrag von m.fuchs »

Bevor ich jetzt noch vollständig zum verknöcherten, alten Meckerer werde, stimme ich dir bei der Erweiterung der Doku zu. :wink: Meinetwegen können ja auch die zusätzlichen Prozeduren mit aufgenommen werden, bloß das deprecated für die bestehenden Funktionen würde ich als falsch empfinden.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

ruewa
Beiträge: 153
Registriert: Sa 12. Apr 2014, 14:43

Re: Datein

Beitrag von ruewa »

Danke, Michael!

@wp_xyz: Könntest Du mit dem als Kompromiß leben?

Dann würde ich vorschlagen, her mit inhaltlichen / stilistischen Verbesserungsvorschlägen (hab's gerade selbst nochmal überarbeitet), und ich stelle das dann heute abend als Kompromißvorschlag in den Bugtracker.

Gruß Rüdiger

wp_xyz
Beiträge: 5131
Registriert: Fr 8. Apr 2011, 09:01

Re: Datein

Beitrag von wp_xyz »

ruewa hat geschrieben:Könntest Du mit dem als Kompromiß leben?
Eigentlich ist es ein "Alles oder nichts": Wenn man davon überzeugt ist, dass die bisherige Funktion in der LCL bleiben kann, braucht man auch die Prozedur nicht --> Patch ablehnen. Wenn man der Meinung ist, dass die Funktion zu leicht zu Fehlern verleitet, sollte man den Patch anwenden, also die Prozedur aufnehmen, und dann aber auch langfristig die Funktion aus der LCL entfernen --> Patch annehmen + "deprecated". Lassen wir die Entwickler entscheiden. Egal wie die Entscheidung ausfällt, ich werde dieses Thema nicht weiter verfolgen, es gibt wichtigeres.

Mathias
Beiträge: 6900
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Datein

Beitrag von Mathias »

Was spricht ernsthaft dagegen, in die Dokumentation von FindAllFiles und FindAllDirectories die folgenden zwei Absätze einzupflegen?
So würde ich es auch machen, dann sollte es jedem klar sein.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6900
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Datein

Beitrag von Mathias »

Wen ich diesen Code angucke, habe ich das Gefühle, das bei der Zeile Memo.Lines := SL; eine Speicherleiche bei Memo.Lines gibt, da Lines auch ein TString ist.

Code: Alles auswählen

var
  SL : TStringList;
begin
  try
    SL := FindAllFiles('.');
    Memo.Lines := SL;
  finally
    SL.Free;
  end;
end; 
Besser währe es, nur den Text(String) zu kopieren und nicht die gane Classe.

Code: Alles auswählen

var
  SL: TStringList;
begin
  try
    SL := FindAllFiles('.');
    Memo1.Lines.Text := SL.Text;  // oder    Memo1.Text := SL.Text;
  finally
    SL.Free;
  end;
end;  
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5131
Registriert: Fr 8. Apr 2011, 09:01

Re: Datein

Beitrag von wp_xyz »

Heaptrc sagt, dass das schon in Ordnung ist.

Und das ist auch logisch, weil das Memo die vom ihm als "Lines" verwendeten Strings selbst aufräumt.
  • Beim Programmstart wird das Memo erzeugt und dieses erzeugt sich die "Lines".
  • Zu Beginn der Routine wird SL erzeugt.
  • De Zuweisung "Memo.Lines := SL" kopiert SL in the Lines des Memo.
  • Am Ende der Routine wird SL zerstört.
  • Schließlich zerstört das Memo am Programm-Ende seine Lines.
Da bleibt nichts übrig.
Zuletzt geändert von wp_xyz am Fr 21. Nov 2014, 17:03, insgesamt 1-mal geändert.

Mathias
Beiträge: 6900
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Datein

Beitrag von Mathias »

Aber was passiert während dieses Befehles mit Memo.Lines ? "Memo.Lines := SL"
Räumt da Memo auch schon auf ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5131
Registriert: Fr 8. Apr 2011, 09:01

Re: Datein

Beitrag von wp_xyz »

Schau dir den Quellcode an: Die Zuweisung "Memo.Lines := SL" bewirkt ein "Memo.Lines.Assign(SL)", und bei dem assign ruft die Stringliste nur Clear auf (d.h. sie löscht sich) und fügt dann SL über AddStrings ein. Lines wird dabei also nicht zerstört, sondern nur gelöscht und neu gefüllt.

Mathias
Beiträge: 6900
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Datein

Beitrag von Mathias »

Jetzt habe ich es gesehen, Lines ist als property deklariert und kann somit Anpassungen machen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten