Seite 1 von 1

Strukturindex eines Arrays direkt ansprechen (erledigt)

Verfasst: 15.09.2009 18:07
von BlueHoschi
Hallo,

wenn ich einem Array eine Struktur verpaßt habe, sagen wir mit 100 einträgen oder mehr (in der Struktur das Array erweitere ich nach bedarf mit Redim).
Und wenn ich dann den eingegebenen Wert je nach Entscheidung als String oder mit val() als Zahlenwert in eine Datei speichern möchte, kann ich dann die einzelnen Struktureinträge direkt anspringen und auslesen?

Beispiel wie ich es jetzt mache (nicht lauffähig man möge mir verzeihen):

Code: Alles auswählen

Structure a
sorte1.s
sorte2.s
.
.
.
value1.s
value2.s
vlaue3.s
.
.
.
endstructure

dim feld.a()
.
.
.
Openfile(0, "test.tst")

If feld(1)\sorte1 = "String"
Writestring(0, feld(1)\value1)
Elseif feld(1)\sorte1 = "value"
Writelong(0, val(feld(1)\value1))
endif
If feld(1)\sorte2 = "String"
Writestring(0, feld(1)\value2)
Elseif feld(1)\sorte2 = "value"
Writelong(0, val(feld(1)\value2))
endif
.
.
.
closefile(0)
Aber gibt es die Möglichkeit anstatt jedesmal alles auszuschreiben sowas wie folgendes zu schreiben:

Code: Alles auswählen

For x = 1 to 100
with feld
If \[aufgerufener index berechnet mit x  der sorte1 entspricht] = "String"
writestring(0, \[aufgerufener index mit x berechnet der value1 entpricht])  
.
.
.
endwith
Next

Re: Strukturindex eines Arrays direkt ansprechen

Verfasst: 15.09.2009 18:32
von helpy
Warum verwendest Du nicht sowas:

Code: Alles auswählen

Structure aTest
  sorte.s[100]
  value.s[100]
EndStructure
"Structure a" solltest Du nicht verwenden, denn "a" ist in PB 4.40 der neue ASCII Datentyp. Wenn Du eine Variable "variable.a" definierst, dann hat das nicht den Typ der Struktur "a" sondern den Basisdatentyp "a" !!!

Verfasst: 15.09.2009 18:55
von BlueHoschi
hm, daran habe ich gar nicht gedacht das man einer Struktur auch eine Dimension geben kann.
So kann ich den Index der Struktur ansprechen.
Das werde ich erstmal testen.

Und danke für den Tip mit a

Edit: So gehts. Danke.
Irgendwie habe ich das wohl nicht so richtig aus der Hilfe herausgelesen, mit der Dimensionierung eines Struktureintrags (ich bleib mal bei dieser Definition).

Re: Strukturindex eines Arrays direkt ansprechen (erledigt)

Verfasst: 15.09.2009 23:20
von gnasen
Wenn du noch etwas speicherplatz sparen willst oder einfach nur so als Idee:

Code: Alles auswählen

#sorte_string  = 0
#sorte_integer = 1

Structure test
  
  sorte.i
  
  StructureUnion
    value_s.s
    value_i.i
  EndStructureUnion
  
EndStructure

Procedure debugvalue(*value.test)
  
  Select *value\sorte
    Case #sorte_string
      Debug *value\value_s
    Case #sorte_integer
      Debug *value\value_i
  EndSelect
  
EndProcedure

testA.test
testA\sorte   = #sorte_string
testA\value_s = "test und so"

testB.test
testB\sorte   = #sorte_integer
testB\value_i = 5

debugvalue(testA)
debugvalue(testB)
An dieser Stelle kann man sehr schön die StructureUnions nutzen.

Re: Strukturindex eines Arrays direkt ansprechen (erledigt)

Verfasst: 16.09.2009 00:05
von Kaeru Gaman
@Gnasen
hast du da nicht was verwechselt?
wenn du eine Union .s/.i hast, dann muss die .i der pointer auf den string sein, was ja .s im grunde ist.
ich hatte die Grundfrage allerdings anders verstanden.

Re: Strukturindex eines Arrays direkt ansprechen (erledigt)

Verfasst: 16.09.2009 08:47
von gnasen
Kaeru Gaman hat geschrieben:@Gnasen
hast du da nicht was verwechselt?
wenn du eine Union .s/.i hast, dann muss die .i der pointer auf den string sein, was ja .s im grunde ist.
ich hatte die Grundfrage allerdings anders verstanden.
Ich habe mir den Thread nochmal durch gelesen und ich glaube du hast recht. Ich lasse es mal trotzdem stehen, vllt braucht es irgendwann mal noch jemand :wink:
Mir ist bewusst, dass ein String nur ein Pointer in PB ist, aber mir ging es hier um die Art darauf zuzugreifen. Würde ich den Pointer @Text nehmen, müsste ich extra ein PokeS() einbauen um es auszulesen.

PS: Sind die Code-Blöcke kleiner geworden? Ich kann bei Helpys Beitrag kaum diese hier unterscheiden

Code: Alles auswählen

"[" von "{"

Re: Strukturindex eines Arrays direkt ansprechen (erledigt)

Verfasst: 16.09.2009 13:01
von Kaeru Gaman
bei proSilver hat das alles ne anständige Größe...