Aktuelle Zeit: 24.09.2020 15:57

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Frage zur Daten
BeitragVerfasst: 23.04.2020 09:28 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
ich möchte alle Daten zu "A" bekommen und in der Form als Paaren:
"1" - "Eins"
"2" - "Zwei"

_________________
Win-10, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur Daten
BeitragVerfasst: 23.04.2020 09:41 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
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.

Code:
; 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 / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur Daten
BeitragVerfasst: 23.04.2020 10:01 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
Danke mk-soft
genau so wollte ich es haben

_________________
Win-10, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur Daten
BeitragVerfasst: 23.04.2020 10:51 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Alternative mit echten Daten ...
Code:
;-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 / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur Daten
BeitragVerfasst: 24.04.2020 09:49 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
Danke an alle,

die Lösung von mk-soft gefällt mir, so habe ich es übernohmen.

Gruß
MarcelX

_________________
Win-10, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zur Daten
BeitragVerfasst: 25.04.2020 22:51 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:29
Und zur Übung ;-) für mich ein weiterer Versuch mit einem Modul und mit Listen statt Maps:
Code:
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)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye