ich möchte alle Daten zu "A" bekommen und in der Form als Paaren:
"1" - "Eins"
"2" - "Zwei"
Frage zur Daten
Re: Frage zur Daten
Win-10, PB 5.31 (Windows - x86)
Re: Frage zur Daten
Bitte bedenk das es sich hier nicht um Daten die in einer Map liegen,
sondern eine rekursive Map handelt, wo die Map-Keys als Daten (nur String) betrachtet werden.
Es ist nicht die typische Verwendung von Maps.
sondern eine rekursive Map handelt, wo die Map-Keys als Daten (nur String) betrachtet werden.
Es ist nicht die typische Verwendung von Maps.
Code: Alles auswählen
; zur "A" gehört "1", "2" und zur "1" gehört "Eins", zur "2" gehört "Zwei"
; zur "B" gehört "4" und zu "4" gehört "OK"
; zur "C" gehört "4", "2", "51" und zu "4" gehört "lala" zu "2" gehört "mama" und zu "51" gehört "papa"
;
; Ich will wissen z.B. was gehört zur "C" und "2" ( => "mama")
Structure DatenMap
Map daten.datenmap()
EndStructure
NewMap mapdaten.datenmap()
AddMapElement(mapdaten(),"A")
AddMapElement(mapdaten()\daten(),"1")
AddMapElement(mapdaten()\daten()\daten(),"Eins")
AddMapElement(mapdaten()\daten(),"2")
AddMapElement(mapdaten()\daten()\daten(),"Zwei")
AddMapElement(mapdaten(),"B")
AddMapElement(mapdaten()\daten(),"4")
AddMapElement(mapdaten()\daten()\daten(),"OK")
;suche nach a 2
If FindMapElement(mapdaten(),"A")
ForEach mapdaten()\daten()
Debug MapKey(mapdaten()\daten()) + " - " + MapKey(mapdaten()\daten()\daten())
Next
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Frage zur Daten
Alternative mit echten Daten ...
Code: Alles auswählen
;-TOP
Structure udtDaten
Text.s
; More data
; index.i
EndStructure
Structure udtMapDaten
Map daten.udtDaten()
EndStructure
NewMap mapdaten.udtMapDaten()
AddMapElement(mapdaten(),"A")
AddMapElement(mapdaten()\daten(),"1")
mapdaten()\daten()\Text = "Eins"
AddMapElement(mapdaten()\daten(),"2")
mapdaten()\daten()\Text = "Zwei"
AddMapElement(mapdaten(),"B")
AddMapElement(mapdaten()\daten(),"4")
mapdaten()\daten()\Text = "OK"
If FindMapElement(mapdaten(),"A")
ForEach mapdaten()\daten()
Debug MapKey(mapdaten()\daten()) + " - " + mapdaten()\daten()\Text
Next
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Frage zur Daten
Danke an alle,
die Lösung von mk-soft gefällt mir, so habe ich es übernohmen.
Gruß
MarcelX
die Lösung von mk-soft gefällt mir, so habe ich es übernohmen.
Gruß
MarcelX
Win-10, PB 5.31 (Windows - x86)
Re: Frage zur Daten
Und zur Übung für mich ein weiterer Versuch mit einem Modul und mit Listen statt Maps:
Code: Alles auswählen
EnableExplicit
DeclareModule DataTree
Structure tTreeNode
Name.s
List Relations.tTreeNode()
EndStructure
Declare.i NewTree(NameOfDataTree.s)
Declare.i FreeTree(*Tree.tTreeNode)
Declare.i AddRelation(*Tree.tTreeNode, Level1.s, Level2.s=#Empty$, Level3.s=#Empty$)
Declare.i GetNodeByName(*Tree.tTreeNode, Name.s)
EndDeclareModule
Module DataTree
Procedure.i NewTree(NameOfDataTree.s)
Protected *Tree.tTreeNode = AllocateStructure(tTreeNode)
*Tree\Name = NameOfDataTree
ProcedureReturn *Tree
EndProcedure
Procedure.i FreeTree(*Tree.tTreeNode)
FreeStructure(*Tree.tTreeNode)
EndProcedure
Procedure.i _AddRelation(*TreeNode.tTreeNode, Name.s)
With *TreeNode
ForEach \Relations()
If \Relations()\Name = Name
ProcedureReturn \Relations()
EndIf
Next
AddElement(\Relations())
\Relations()\Name = Name
ProcedureReturn \Relations()
EndWith
EndProcedure
Procedure.i AddRelation(*TreeNode.tTreeNode, Name1.s, Name2.s=#Empty$, Name3.s=#Empty$)
Protected *NewTreeNode.tTreeNode
If Name1 = #Empty$ : ProcedureReturn *NewTreeNode : EndIf
*NewTreeNode = _AddRelation(*TreeNode, Name1)
If Name2 = #Empty$ : ProcedureReturn *NewTreeNode : EndIf
*NewTreeNode = _AddRelation(*NewTreeNode, Name2)
If Name3 = #Empty$ : ProcedureReturn *NewTreeNode : EndIf
*NewTreeNode = _AddRelation(*NewTreeNode, Name3)
ProcedureReturn *NewTreeNode
EndProcedure
Procedure.i GetNodeByName(*TreeNode.tTreeNode, Name.s)
Protected *TreeNodeOfName.tTreeNode
With *TreeNode
ForEach \Relations()
If \Relations()\Name = Name
*TreeNodeOfName = \Relations()
Break
EndIf
Next
EndWith
ProcedureReturn *TreeNodeOfName
EndProcedure
EndModule
CompilerIf #PB_Compiler_IsMainFile
; zur "A" gehört "1", "2" und zur "1" gehört "Eins", zur "2" gehört "Zwei"
; zur "B" gehört "4" und zu "4" gehört "OK"
; zur "C" gehört "4", "2", "51" und zu "4" gehört "lala" zu "2" gehört "mama" und zu "51" gehört "papa"
;
; Ich will wissen z.B. was gehört zur "C" und "2" ( => "mama")
Define *Tree1.DataTree::tTreeNode
Define *Level1.DataTree::tTreeNode
Define *Level2.DataTree::tTreeNode
Define *Level3.DataTree::tTreeNode
*Tree1 = DataTree::NewTree("MeineDaten TEST 1")
DataTree::AddRelation(*Tree1, "A", "1", "Eins")
DataTree::AddRelation(*Tree1, "A", "2", "Zwei")
DataTree::AddRelation(*Tree1, "B", "4", "OK")
DataTree::AddRelation(*Tree1, "C", "4", "lala")
DataTree::AddRelation(*Tree1, "C", "2", "mama")
DataTree::AddRelation(*Tree1, "C", "51", "papa")
Debug "==============================================="
Debug "Name of data tree: " + *Tree1\Name
Debug "List all tree items:"
ForEach *Tree1\Relations()
ForEach *Tree1\Relations()
*Level1 = *Tree1\Relations()
Debug "+ " + *Level1\Name
ForEach *Level1\Relations()
*Level2 = *Level1\Relations()
Debug " +-> " + *Level2\Name
ForEach *Level2\Relations()
*Level3 = *Level2\Relations()
Debug " --> " + *Level3\Name
Next
Next
Next
Next
DataTree::FreeTree(*Tree1)
Define *Tree2.DataTree::tTreeNode
*Tree2 = DataTree::NewTree("MeineDaten TEST 2")
*Level1 = DataTree::AddRelation(*Tree2, "A")
DataTree::AddRelation(*Level1, "1", "Eins")
DataTree::AddRelation(*Level1, "2", "Zwei")
DataTree::AddRelation(*Tree2, "B", "4", "OK")
*Level1 = DataTree::AddRelation(*Tree2, "C")
DataTree::AddRelation(*Level1, "4", "lala")
DataTree::AddRelation(*Level1, "2", "mama")
DataTree::AddRelation(*Level1, "51", "papa")
*Level1 = DataTree::GetNodeByName(*Tree2, "B")
DataTree::AddRelation(*Level1, "1001", "Aladin")
DataTree::AddRelation(*Level1, "4711", "Duft")
DataTree::AddRelation(*Level1, "2020", "Dieses Jahr")
DataTree::AddRelation(*Level1, "4", "In Ordnung")
Debug "==============================================="
Debug "Name of data tree: " + *Tree2\Name
Debug "List all tree items:"
ForEach *Tree2\Relations()
ForEach *Tree2\Relations()
*Level1 = *Tree2\Relations()
Debug "+ " + *Level1\Name
ForEach *Level1\Relations()
*Level2 = *Level1\Relations()
Debug " +-> " + *Level2\Name
ForEach *Level2\Relations()
*Level3 = *Level2\Relations()
Debug " --> " + *Level3\Name
Next
Next
Next
Next
DataTree::FreeTree(*Tree2)
CompilerEndIf
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)