Data - auslesen

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Little John

Beitrag von Little John »

marco2006 hat geschrieben:Guck mal auf mein Beispiel.
Ah, danke. Das hatte ich übersehen.

Gruß, Little John
Little John

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

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Little John

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

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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 :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich schätze mal, das war nur ein einfaches Beispiel, um auszuprobieren, wie Data überhaupt funktioniert...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten