Thema: Delphi M3U

Einzelnen Beitrag anzeigen

Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#4

Re: M3U

  Alt 26. Sep 2008, 22:31
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] = '#EXTM3Uthen
    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;
  Mit Zitat antworten Zitat