Verfasst: 06.08.2007 06:21
@Fluid Byte
Du scheinst nicht bedacht zu haben, dass eine Structur zur Compilezeit festliegen muss und nicht dynamisch wärend der Laufzeit "angelegt" wird.
@ReneMiner
Die Geschichte mit einer dynamischen Anzahl von Titeln für jeder Schallplatte kannst Du aber auch noch mit reinen PB-Bordmitteln lösen:
Die Schallplatten selber kannst Du wie von Dir gewünscht in einem normalen Arrey speichern und so über den Index darauf zugreiffen.
Um zu jeder Platte eine dynamische Anzahl an Titeln zu realisieren, werden einfach alle Titel in einer großen LinkedList gespeichert.
Bei dieser Liste ist es wichtig, dass sich alle zu einer Schallplatte gehörenden Titel hintereinander in der LinkedList befinden.
Dies ist aber recht einfach zu realisieren.
Um nun jederzeit auf die zu der jeweiligen Schallplatte gehörenden Titel zugreifen zu können brauchst Du in der Schallplatten-Struktur nur die Adresse des ersten und letzten zu dieser Platte gehörenden Titel-Elements zu speichern.
Hierdurch kannst Du die Anzahl der Titel die zu einer Platte gehören vollkommen dynamisch verwalten.
Wie Du das Ganze nun umsetzen kannst zeig' ich Dir mal an einem Beispiel:
Gruß, PL.
Du scheinst nicht bedacht zu haben, dass eine Structur zur Compilezeit festliegen muss und nicht dynamisch wärend der Laufzeit "angelegt" wird.
@ReneMiner
Die Geschichte mit einer dynamischen Anzahl von Titeln für jeder Schallplatte kannst Du aber auch noch mit reinen PB-Bordmitteln lösen:
Die Schallplatten selber kannst Du wie von Dir gewünscht in einem normalen Arrey speichern und so über den Index darauf zugreiffen.
Um zu jeder Platte eine dynamische Anzahl an Titeln zu realisieren, werden einfach alle Titel in einer großen LinkedList gespeichert.
Bei dieser Liste ist es wichtig, dass sich alle zu einer Schallplatte gehörenden Titel hintereinander in der LinkedList befinden.
Dies ist aber recht einfach zu realisieren.
Um nun jederzeit auf die zu der jeweiligen Schallplatte gehörenden Titel zugreifen zu können brauchst Du in der Schallplatten-Struktur nur die Adresse des ersten und letzten zu dieser Platte gehörenden Titel-Elements zu speichern.
Hierdurch kannst Du die Anzahl der Titel die zu einer Platte gehören vollkommen dynamisch verwalten.
Wie Du das Ganze nun umsetzen kannst zeig' ich Dir mal an einem Beispiel:
Code: Alles auswählen
Structure LiedStruct
Titel.s
Interpret.s
Laenge.l
EndStructure
Structure eineSchallplatte
AlbumName.s
nTitel.l ; Anzahl der Titel
ErstesLLElement.l ; Zeiger auf erster Lied welches zu dieser Schallplatte gehört
LetztesLLElement.l ; Zeiger auf letztes Lied welches zu dieser Schallplatte gehört
EndStructure
Global Dim Platte.eineSchallplatte(9)
Global NewList EinLied.LiedStruct()
; ############################################################################################
; # Mit dieser Prozedur kannst Du einer Schallplatte jederzeit einen neuen Titel hinzufügen. #
; ############################################################################################
Procedure AddSong(Schallplatte, Titel.s, Interpret.s, Laenge.l)
If Platte(Schallplatte)\LetztesLLElement
ChangeCurrentElement(EinLied(), Platte(Schallplatte)\LetztesLLElement)
EndIf
AddElement(EinLied())
EinLied()\Titel = Titel
EinLied()\Interpret = Interpret
EinLied()\Laenge = Laenge
Platte(Schallplatte)\LetztesLLElement = @EinLied()
If Not Platte(Schallplatte)\ErstesLLElement : Platte(Schallplatte)\ErstesLLElement = @EinLied() : EndIf
Platte(Schallplatte)\nTitel + 1
EndProcedure
For n = 1 To 100
AddSong(Random(9), "Titel_"+Str(10000+Random(9999)), "Interpret_"+Str(10000+Random(9999)), Random(3*60) + 120)
Next n
For n = 0 To 9
Debug "Die Schallplatte Nr. "+Str(n+1)+" hat "+Str(Platte(n)\nTitel)+" Titel."
If Platte(n)\ErstesLLElement
ChangeCurrentElement(EinLied(), Platte(n)\ErstesLLElement)
Repeat
Debug " - "+EinLied()\Titel + " "+EinLied()\Interpret + " Länge: "+FormatDate("%ii:%ss",EinLied()\Laenge)
If @EinLied() = Platte(n)\LetztesLLElement : Break : EndIf
Until Not NextElement(EinLied())
EndIf
Next n