Seite 1 von 1

Map mit structure

Verfasst: 11.01.2020 11:13
von kmais
Hallo, Leute ...

Wenn ich die pb Hilfe richtig verstehe, ist es doch möglich eine Map() mit einer structure zu versehen.

Also so etwas etwa:
Structure treeParams
Key.s
KeyId.i
Text.s
ImageId.i
Vg.s
VgId.i
EndStructure

NewMap treeIn.treeParams()
NewMap treeOut.treeParams()

Ich habe folgenden Code:

Code: Alles auswählen

Structure treeParams
  Key.s
  KeyId.i
  Text.s
  ImageId.i
  Vg.s
  VgId.i
EndStructure
NewMap treeIn.treeParams()
NewMap treeOut.treeParams()

key.s="start"

AddMapElement(treeOut(),key)
treeOut(key)=treeIn(key)
Procedure parseTree(key)
  ForEach treeIn()
    If treeIn()\Vg = key
      key=treeIn()\Key
      AddMapElement(treeOut(),key)
      treeOut(key)=treeIn(key)
      DeleteMapElement(treeIn(),key)
      parseTree(key)
    EndIf
  Next
EndProcedure
Es geht jetzt nicht um den Code in seiner Funktion. Das kann ich sowieso erst testen, wenn dieser Fehler behoben wird.
Der Compiler sagt mir beim Eintritt in foreach, dass treeIn KEINE Map ist.
Wieso ????? Wo liegt mein Denkfehler oder mein fehlendes Wissen? Oder habe ich grundsätzlich etwas nicht verstanden?

Vielen Dank für die Hilfe

.... Peter ....

Re: Map mit structure

Verfasst: 11.01.2020 11:22
von #NULL
Die Maps sind nicht sichtbar innerhalb der Procedure. Du must sie entweder als 'Global NewMap' definieren, oder als 'Shared tree..()' innerhalb der Procedure.

Re: Map mit structure

Verfasst: 11.01.2020 11:28
von Thorsten1867
Du hast die Map außerhalb der Procedur definiert, womit diese innerhalb dieser unbekannt ist.
Es gibt 2 Möglichkeiten:

- Map global definieren: Global NewMap treeIn.treeParams()
- Map an die Prozedur übergeben (siehe Code)

Code: Alles auswählen

Structure treeParams
  Key.s
  KeyId.i
  Text.s
  ImageId.i
  Vg.s
  VgId.i
EndStructure
NewMap treeIn.treeParams()
NewMap treeOut.treeParams()

key.s="start"

AddMapElement(treeOut(),key)
treeOut(key)=treeIn(key)

Procedure parseTree(key.s, Map In.treeParams(), Map Out.treeParams())
  ForEach In()
    If In()\Vg = key
      key=In()\Key
      AddMapElement(In(), key)
      Out(key)\Key = In(key)\Key
      DeleteMapElement(In(), key)
      parseTree(key, In(), Out())
    EndIf
  Next
EndProcedure
PS: Ich habe die restlichen Fehler gleich auch noch behoben. :wink:

Re: Map mit structure

Verfasst: 11.01.2020 11:43
von kmais
... Mist ... :oops: :( ,

........ vielen Dank ....

Re: Map mit structure

Verfasst: 11.01.2020 15:02
von Shardik
Thorsten1867 hat geschrieben:Es gibt 2 Möglichkeiten:

- Map global definieren: Global NewMap treeIn.treeParams()
- Map an die Prozedur übergeben (siehe Code)
Es gibt noch eine dritte Möglichkeit:
- Map in Hauptprogramm mit Define deklarieren und in der Prozedur mit Shared (die Map ist dann außer im Hauptprogramm nicht automatisch in allen Prozeduren bekannt wie bei Deklaration mit Global)