Strukturindex eines Arrays direkt ansprechen (erledigt)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
BlueHoschi
Beiträge: 97
Registriert: 02.10.2007 07:19

Strukturindex eines Arrays direkt ansprechen (erledigt)

Beitrag 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
Zuletzt geändert von BlueHoschi am 15.09.2009 19:14, insgesamt 1-mal geändert.
Wer Dir Steine in den Weg legt, pflastert den vielleicht.

PB 5.21, Win 7 64 bit
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Strukturindex eines Arrays direkt ansprechen

Beitrag 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" !!!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
BlueHoschi
Beiträge: 97
Registriert: 02.10.2007 07:19

Beitrag 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).
Wer Dir Steine in den Weg legt, pflastert den vielleicht.

PB 5.21, Win 7 64 bit
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Re: Strukturindex eines Arrays direkt ansprechen (erledigt)

Beitrag 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.
pb 4.51
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Strukturindex eines Arrays direkt ansprechen (erledigt)

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Re: Strukturindex eines Arrays direkt ansprechen (erledigt)

Beitrag 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 "{"
pb 4.51
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Strukturindex eines Arrays direkt ansprechen (erledigt)

Beitrag von Kaeru Gaman »

bei proSilver hat das alles ne anständige Größe...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten