Seite 2 von 2
Verfasst: 10.08.2008 13:47
von Kaeru Gaman
strings stehen direkt drin, deswegen kann man sie nur sequentiell lesen,
außer man macht sie von vorne herein gleich groß.
als demo lese ich mal verschieden lange strings zeichenweise aus:
Code: Alles auswählen
DataSection
Fluss:
Data.s "rhein"
Data.s "main"
Data.s "havel"
Data.s "spreewald"
Data.s "fulda"
EndDataSection
Restore Fluss
For n=0 To 32
Read out.c
Debug Chr(34)+Chr(out)+Chr(34)+" "+Str(out)
Next
die for schleife funktioniert nur, weil ich vorher die anzahl der buchstaben gezählt hab und für jedes stringende ein nullzeichen dazurechne.
also, wenn ich die strings gleich lang mache, ggf. datenfelder mit dummies auffülle,
dann kann ich feldweise mit PeekS und nem offset-pointer lesen.
wenn meine strings verschieden lang sind, bleibt mir nichts anderes übrig als sequentiell zu lesen.
Verfasst: 10.08.2008 14:13
von Little John
marco2006 hat geschrieben:Guck mal auf mein Beispiel.
Ah, danke. Das hatte ich übersehen.
Gruß, Little John
Verfasst: 10.08.2008 14:27
von Little John
Kaeru Gaman hat geschrieben:wenn meine strings verschieden lang sind, bleibt mir nichts anderes übrig als sequentiell zu lesen.
Oder man speichert die Offsets der Strings mit ab, das scheint zu gehen:
Code: Alles auswählen
DataSection
Offsets:
Data.w 0, 6, 11, 17, 23 ; Offsets der Strings auf das Label 'Namen'
Namen:
Data.s "Rhein","Main","Havel","Spree","Fulda"
EndDataSection
i = 4
*p.word = ?Offsets + i*SizeOf(word)
Debug PeekS(?Namen + *p\w)
Würde auch mit 1 Label gehen, aber mit 2 Labels ist das Hinzufügen neuer Daten einfacher.
Gruß, Little John
Verfasst: 10.08.2008 15:41
von Kaeru Gaman
ist ja schön, nur irgendwann hast du den sinn einer Datasection komplett verlassen.
warum dann nicht gleich die daten in einer Datei ablegen,
notfalls in die Ressourcen packen,
und zum Programmstart in ein Array lesen?
dann hast du sie auch im direktzugriff und nur einmal im speicher...
Verfasst: 10.08.2008 15:51
von Little John
Erstmal interessierte es mich einfach, ob es so geht.
Ansonsten denke ich hast Du recht, aber das könnte man dann ja eigentlich sowieso immer so machen wie Du sagst, oder? Anders gefragt, in welcher Situation bietet denn die Verwendung der DataSection einen Vorteil?
Gruß, Little John
Verfasst: 10.08.2008 15:56
von Kaeru Gaman
> Anders gefragt, in welcher Situation bietet denn die Verwendung der DataSection einen Vorteil?
eigentlich nur, wenn es sich um minimale datenmengen handelt,
die man zum erstellzeitpunkt mal eben schnell editieren können möchte.
zum beispiel, wenn du in einem ballergame vier waffen mit je vier leveln hast,
brauchst du 16 schadenswerte und 16 energieverbrauchswerte.
die kannst du in eine Datasection setzen, damit du sie bei balancing-tests schnell mal ändern kannst.
größere datasections läßt man erzeugen, z.b. mit dem tool von ts-soft,
die dienen z.b. dazu, in einem geposteten listing icons mit einbaun zu können.
Verfasst: 14.08.2008 13:43
von mk-soft
Finde die lösungen viel zu aufwendig hier DataSection zu verwenden.
Da reicht auch:
Code: Alles auswählen
Global Dim fluss.s(5)
fluss(0) = "rhein"
fluss(1) = "main"
fluss(2) = "havel"
fluss(3) = "spree"
fluss(4) = "fulda"
For i = 0 To 4
Debug fluss(i)
Next
FF

Verfasst: 14.08.2008 13:48
von Kaeru Gaman
ich schätze mal, das war nur ein einfaches Beispiel, um auszuprobieren, wie Data überhaupt funktioniert...