omata: Dein Code ist sehr hilfreich. Ich habe ihn in meinen Code integriert. Dies tue ich generell nicht ohne ihn zu verstehen. Ich habe noch eine Frage zum Code:
Delphi-Quellcode:
if ExtractFilePath(Filename) = '' then
Dateiname := ExtractFilePath(Application.ExeName)+Zeile
else
Dateiname := ExtractFilePath(Filename)+Zeile;
Warum genügt nicht folgender Code ?
Dateiname := ExtractFilePath(Filename)+Zeile;
Abgesehen davon: Bei meiner an sich identischen Version im Code liest mir der Code aus irgendeinem Grund ??? – Boléro nicht aus. Ich erhalte wie bei meinem alten Code nichts weiter als eine komplett leere Ausgabe. Ich habe nicht viel geändert im Vergleich zu deinem Code. Abgesehen von der Ersetzung von Textfile durch StringList habe ich nichts geändert und die eine Stelle mit dem Dateiname (siehe oben) habe ich wie oben gezeigt verändert. Also hier nochmal der ganze Code, sieht jemand den Fehler ? Ich habe extra dein Projekt mal kompiliert und es ging alles sehr gut. Woran könnte das liegen ? Ist da eventuell ein verstecktes Zeichen in der Datei welches wegen anderem Auslesen deines Codes keine Rolle spielt ? Alle anderen Lieder liest auch mein Code einwandfrei aus.
Delphi-Quellcode:
var sl : TStrings;
Zeile, Titel, Dateiname : String; // Titel=Artist+Titel
p, Sekunden : Integer;
begin
sl := TStringList.Create;
sl.LoadFromFile(f);
if sl.Count > 1 then
begin
if sl[0] = '#EXTM3U' then
begin
Sekunden := -1;
Titel := '';
for i := 1 to Pred(sl.Count) do // 1, weil erste Zeile #EXTM3U
begin
Zeile := Trim(sl[i]);
Dateiname := '';
if Pos('#EXTINF', Zeile) = 1 then
begin
Delete(Zeile, 1, 8);
p := Pos(',', Zeile);
if p > 0 then
begin
if not TryStrToInt(Copy(Zeile, 1, Pred(p)), Sekunden) then
Sekunden := -1;
Delete(Zeile, 1, p);
Titel := Zeile;
end;
end else
begin
Dateiname := Zeile;
{$IFDEF WIN}
if Pos(':', Zeile) > 0 then
Dateiname := Zeile
else
{$ENDIF}
{$IFDEF UNIX}
if (Length(Zeile) > 0) and (s[1] = '/') then
Dateiname := Zeile
else
{$ENDIF}
Dateiname := ExtractFilePath(f)+Zeile;
end;
if Dateiname <> '' then
begin
SetLength(Arr, Succ(Length(Arr)));
Arr[High(Arr)].Dauer := SecToOut(Sekunden);
Arr[High(Arr)].Artist := Titel;
Arr[High(Arr)].Dateiname := Dateiname;
Arr[High(Arr)].kDateiname := ExtractFileName(Dateiname);
ShowMessage(Arr[High(Arr)].Artist);
Sekunden := -1;
Titel := '';
end;
end;
end;
end;
sl.Free;
end;