Erstmal Hallo an euch alle.
Das ist mein erstes Thema was ich heute schreibe. Also bitte nicht so streng sein mit mir. Was die Erklärung der Frage angeht, weiß ich noch nicht so ganz wie ich sie formulieren soll.
Ich lese aus einer MP3 Datei, alle gefundenen Inhaltsverzeichnisse und Kapitel in zugehörige Klassen ein. Die zwei Klassen stehen hier.
Delphi-Quellcode:
type TCHAP=class // Kapitel
ElementID: String; // eindeutiger Bezeichner (z.b. ch1)
end;
type TCTOC=class //Inhaltsverzeichnisse
ElementID: String; // eindeutiger Bezeichner (z.b. TOC1)
TopLevel: Boolean; // Wurzelknoten
EntryCount: Integer; // Anzahl der Childelemente
ElementIDList: array of String; //Childelementen Liste (z.b. TOC2, ch1, ch2, TOC3)
end;
Danach packe ich die jeweiligen Klassen in ein TOjectList und zum Schluss übergebe ich Sie der Funktion "GetTreeText".
Delphi-Quellcode:
function GetTreeText(Playlist:TObjectList): String;
procedure InlineGetTreeText(ElementID: String = ''; space: string = '');
var
i, y: Integer;
Begin
if Playlist.Count <> 0 then
Begin
for i := 0 to Pred(Playlist.Count) do
Begin
if Playlist.Items[i].ClassType = TCTOC then
Begin
if (ElementID = '') or (ElementID = TCTOC(Playlist.Items[i]).ElementID) then
Begin
Result := Result + space + '+' + TCTOC(Playlist.Items[i]).ElementID + #13;
if ElementID = TCTOC(Playlist.Items[i]).ElementID then
Begin
Delete(space,length(space)-1,2);
break;
End;
if TCTOC(Playlist.Items[i]).EntryCount <> 0 then
Begin
for y := 0 to Pred(TCTOC(Playlist.Items[i]).EntryCount) do
Begin
InlineGetTreeText(TCTOC(Playlist.Items[i]).ElementIDList[y],space + ' ');
End;
End;
End;
End else
Begin
if (ElementID = '') or (ElementID = TCHAP(Playlist.Items[i]).ElementID) then
Result := Result + space + '-' + TCHAP(Playlist.Items[i]).ElementID + #13;
if ElementID = TCTOC(Playlist.Items[i]).ElementID then
Begin
Delete(space,length(space)-1,2);
break;
End;
End;
End;
End else
result := '';
End;
Begin
InlineGetTreeText;
End;
Diese Funktion sollte mir in folgender Form ein String zurück geben:
Code:
+TOC1
-TOC2
-ch1
-ch2
+TOC3
+TOC4
+TOC5
-ch3
-ch4
Das Problem was ich jetzt habe ist, die Inhaltsverzeichnisse kommen im ID3v2 Tag der MP3 Datei alle zuerst und dann erst die Kapitel.
Also in dieser Form:
TOC1
TOC2
TOC3
TOC4
TOC5
ch1
ch2
ch3
ch4
In dieser Reihenfolge befinden sie sich auch im TObjectList.
Ich müsste also die ursprüngliche Baumstruktur wiederherstellen. Das wollte ich auch tun aber die Funktion GetTreeText liefert mir folgendes zurück:
Code:
+TOC1
+TOC2
-ch1
-ch2
+TOC3
+TOC2
+TOC3
+TOC4
-ch4
+TOC4
+TOC5
-ch3
+TOC5
-ch1
-ch2
-ch3
-ch4
Wenn jemand sich die Funktion mal anschauen könnte währe ich unendlich dankbar.
Im vorraus schon mal 1000 Dank.
Paulchen