Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringlist aus Datei gelesen (https://www.delphipraxis.net/59137-tstringlist-aus-datei-gelesen.html)

bluescreen25 17. Dez 2005 22:16


TStringlist aus Datei gelesen
 
Hallo, ich habe ein Problem:

Ich speichere eine TStringliste mit Dateinamen inkl. Pfad in eine Playlist.lst ab.
Beim nächsten Programmstart lädt er die Strings wieder ein.

Jetzt möchte ich beim einladen der Liste feststellen, ob die hinterlegten Dateien noch existieren und wenn nicht, sollen diese aus der Liste gelöscht werden, den restlichen Dateien werden die Pfade gekappt und der sichtbaren Listbox zugeführt.

Kann da jemand helfen?
Delphi-Quellcode:
procedure Tmediaplayer_frm.FormActivate(Sender: TObject);
var i:integer;
begin
  if config_frm.playlist_load_select.Checked = true then
  begin
    if FileExists(ProgrammPfad + '\PlayList.lst')then
     begin
       PlayList.LoadFromFile(ProgrammPfad + '\PlayList.lst');
       For i:=0 to PlayList.Count-1 do
       //if FileExists(PlayList.Strings[i]) then
       //Playlist.Delete(i);

       //else
       
       PlayList_ListBox.Items.Add(ExtractFileName(PlayList[i]));
     end
  else
  end;
end;

tomsel 17. Dez 2005 22:37

Re: TStringlist aus Datei gelesen
 
Ich würde mal das vorschlagen:
Delphi-Quellcode:
       
       i:=0
       while i < PlayList.Count do
         if FileExists(PlayList.Strings[i]) then begin
           PlayList_ListBox.Items.Add(ExtractFileName(PlayList[i]));
           inc(i)
         end else
           PlayList.Delete(i)
In der For-Schleife Items aus der Liste zu löschen ist sehr ungut, da das Schleifenende von der ursprünglichen Anzahl der Einträge bestimmt ist.

bluescreen25 17. Dez 2005 22:54

Re: TStringlist aus Datei gelesen
 
Danke, das funktioniert prima. Hmm wäre da nicht drauf gekommen. :-D

Amateurprofi 18. Dez 2005 00:51

Re: TStringlist aus Datei gelesen
 
Du kannst auch mit For ... arbeiten, mußt dann aber rückwärts zählen, also
for i:=PlayList.Count-1 downto 0 do
.....

marabu 18. Dez 2005 09:46

Re: TStringlist aus Datei gelesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo bluescreen25,

du könntest es auch noch ganz anders angehen. Die angehängte Demo zeigt dir, wie du deine Daten nur einmal verwaltest und doch die Darstellung deiner Wahl erhalten kannst. Du musst dazu nur die ListBox in den virtuellen Modus versetzen (ListBox.Style = lbVirtual).

Grüße vom marabu

bluescreen25 18. Dez 2005 11:39

Re: TStringlist aus Datei gelesen
 
Zitat:

Zitat von Amateurprofi
Du kannst auch mit For ... arbeiten, mußt dann aber rückwärts zählen, also
for i:=PlayList.Count-1 downto 0 do
.....

kannst du mir etwas näher erklren, warum das so auch gehen kann? Kann das irgendwie nicht nachvollziehen.

dahead 18. Dez 2005 11:48

Re: TStringlist aus Datei gelesen
 
Zitat:

Zitat von bluescreen25
Zitat:

Zitat von Amateurprofi
Du kannst auch mit For ... arbeiten, mußt dann aber rückwärts zählen, also
for i:=PlayList.Count-1 downto 0 do
.....

kannst du mir etwas näher erklren, warum das so auch gehen kann? Kann das irgendwie nicht nachvollziehen.

das problem war doch, dass du mit for i := 0 to Länge vorne anfängst, einen einträg löscht, und dann gar nicht bis Länge kommen kannst.

wenn du aber mit for I := Länge downto 0 arbeitest und dann bspw. der ersten (also in diesem fall den letzten Eintrag = Länge) löscht, hast du kein problem, da der nächste ja einfach Länge - 1 ist.

Hoffe das war einigermaßen verständlich.

bluescreen25 18. Dez 2005 15:11

Re: TStringlist aus Datei gelesen
 
ja auf jeden Fall, vielen Dank !


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 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