Ich möchte einen fetten Dank an Cardian den Thread Ersteller ausrichten ! (der wesentlich einfallsreicher und abstrakter
denken kann als ich
)
Seit ewigkeiten suche ich nach einer schnellen (also map) und speicherschonenden Möglichkeit
einem Map Element mehrere Einträge zuzuweisen..........die PB Hilfe hat mir vor 2 Stunden ^^ einen kleinen
Anhaltpunkt gegeben.
Code: Alles auswählen
Beispiel: Dynamisches Objekt
Structure Person
Name$
Age.l
List Friends$()
EndStructure
John.Person
John\Name$ = "John"
John\Age = 23
; Jetzt fügen wir einige Freunde zu John hinzu
;
AddElement(John\Friends$())
John\Friends$() = "Jim"
AddElement(John\Friends$())
John\Friends$() = "Monica"
ForEach John\Friends$()
Debug John\Friends$()
Next
Bin aber ums verrecken nicht darauf gekommen wie mann Structure erstellen könnte die eine Map enthält b.z.w diese
ansprechen könnte, und bin erst Recht nicht darauf gekommen das eine Map in einer Strukture eine Sub Map/Listhaben kann.
Ich hab locker eine Stunde alle möglichen Suchbegriffe probiert (map als Suchbegriff wird übrigends völlig von der Suche ignoriert)
Sachen wie B-Tree (das B- wird von der Suche ignoriert), Map mehreren, Map füllen, Map Dateiliste usw usw
brachte alles nichts (auch newmap in kombination mit füllen usw brachte nichts, nur zitausend treffer die nichts
damit zutun hatten) erst treemap gab 3 Treffer.
Und durch die Vorlage & Idee von Cardian konnte ich endlich etwas basteln, mit dem ich pro MapElement/Foldername
eine eigene Dateiliste speichern kann...........was mir (und ich denke mal vielen anderen auch) sehr hilft wenn
mann das braucht. z.B wenn mann einen Folder & File Index hat, der nicht auf der HD vorhanden ist, und mann will schnell
den Folder einer Map (nach einem Doppelklick) selektieren dessen Sub Filelist/FileMap dann eine Gadgetlist füllt)
Hier der Code den ich daraus basteln konnte (enthält Pseudo Input Daten, Hauptsache das Prinzip ist da)
Code: Alles auswählen
EnableExplicit
Define c.i
Structure FileData
Name.s
Attrib.s
EndStructure
Structure StrucFiles
Map FilesMap.FileData()
List FilesLL.FileData()
EndStructure
NewMap DirMap.StrucFiles()
AddMapElement(DirMap(), "C:\A\")
For c = 0 To 19
AddMapElement(DirMap()\FilesMap(), Str(c))
DirMap()\FilesMap()\Attrib = "H"
AddElement(DirMap()\FilesLL())
DirMap()\FilesLL()\Name = Str(c)
DirMap()\FilesLL()\Attrib = "H"
Next
AddMapElement(DirMap(), "C:\B\")
For c = 20 To 39
AddMapElement(DirMap()\FilesMap(), Str(c))
DirMap()\FilesMap()\Attrib = "H"
AddElement(DirMap()\FilesLL())
DirMap()\FilesLL()\Name = Str(c)
DirMap()\FilesLL()\Attrib = "H"
Next
AddMapElement(DirMap(), "C:\C\")
For c = 40 To 59
AddMapElement(DirMap()\FilesMap(), Str(c))
DirMap()\FilesMap()\Attrib = "H"
AddElement(DirMap()\FilesLL())
DirMap()\FilesLL()\Name = Str(c)
DirMap()\FilesLL()\Attrib = "H"
Next
AddMapElement(DirMap(), "C:\D\")
For c = 60 To 79
AddMapElement(DirMap()\FilesMap(), Str(c))
DirMap()\FilesMap()\Attrib = "H"
AddElement(DirMap()\FilesLL())
DirMap()\FilesLL()\Name = Str(c)
DirMap()\FilesLL()\Attrib = "H"
Next
Debug "---------"
;/ JETZT NOCH 60 bis 80 WEIL DAS ZULETZT GEADDETE AKTIV IST B.Z.W Der Key (C:\D\) von der DirMap() Map
Debug "----DEBUG LINKED LIST"
ForEach DirMap()\FilesLL()
Debug DirMap()\FilesLL()\Name+" "+DirMap()\FilesLL()\Attrib
Next
Debug "----DEBUG MAP"
ForEach DirMap()\FilesMap()
Debug MapKey(DirMap()\FilesMap())+" "+DirMap()\FilesMap()\Attrib
Next
Debug ""
Debug "-B-"
If FindMapElement(DirMap(),"C:\B\")
ForEach DirMap()\FilesLL()
Debug DirMap()\FilesLL()\Name+" "+DirMap()\FilesLL()\Attrib
Next
EndIf
Debug ""
Debug "-A-"
If FindMapElement(DirMap(),"C:\A\")
ForEach DirMap()\FilesLL()
Debug DirMap()\FilesLL()\Name+" "+DirMap()\FilesLL()\Attrib
Next
Debug "-A-----> BUT NOW THE SUB MAP"
;/ DAS GEILSTE ! DIE UNTERMAP IST TROTZDEM SORTIERT ! UND NICHT WILD DURCHEINANDER WIE BEI DER OBERMAP
;/ WEIS DER GEIER WARUM
If FindMapElement(DirMap()\FilesMap(),"5")
Debug "FOUND 5"
ForEach DirMap()\FilesMap()
Debug MapKey(DirMap()\FilesMap())+" "+DirMap()\FilesMap()\Attrib
Next
EndIf
EndIf
Debug ""
Debug "-D-"
If FindMapElement(DirMap(),"C:\D\")
ForEach DirMap()\FilesLL()
Debug DirMap()\FilesLL()\Name+" "+DirMap()\FilesLL()\Attrib
Next
EndIf
Debug ""
Debug "-C-"
If FindMapElement(DirMap(),"C:\C\")
ForEach DirMap()\FilesLL()
Debug DirMap()\FilesLL()\Name+" "+DirMap()\FilesLL()\Attrib
Next
EndIf
Warum die SubMap sortiert ist weis ich auch nicht
aber egal, Hauptsache es funzt !