Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Data?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
NixAhnung



Anmeldungsdatum: 07.05.2005
Beiträge: 37

BeitragVerfasst am: 14.05.2005, 16:55    Titel: Data? Antworten mit Zitat

Wie funktioniert der Befehl Data und was bringt der überhaubt?

Ich habe mir hier ein Spiel von der Seite runtergeladen BaloonX heißt das und da steht folgendes:

DATA &H0005,&H0007,&H8888,&H8888,&H0000,&H0000,&H0000,&H0000
DATA &H0000,&H0000,&H8888,&H8888,&HD8D8,&HD8D8,&HD8D8,&HD8D8
DATA &H0005,&H0007,&H7171,&H2171,&H88F8,&H8800,&H00F8,&H8800
DATA &H00F8,&H0000,&H7151,&H0151,&H2101,&H2101,&H2121,&H2121
DATA &H000D,&H0007,&HF8FF,&HF8FF,&H0000,&HF8FF,&H889A,&HF8FF
DATA &H7065,&HF8FF,&HA8DA,&HF8FF,&H5025,&HF8FF,&H88DA,&HF8FF
DATA &H7025,&HF8FF,&HB8DA,&HF8FF,&H4025,&HF8FF,&HB888,&HF8FF
DATA &H4077,&HF8FF,&HF8FF,&HF8FF,&H0000,&HF8FF
DATA &H000D,&H0007,&H0300,&HFBFF,&H0000,&HFBFF,&H0200,&HFBFF
DATA &H7177,&HFBFF,&H0300,&HFBFF,&H5045,&HFBFF,&H0300,&HFBFF
DATA &H5075,&HFBFF,&H0300,&HFBFF,&H5015,&HFBFF,&H0200,&HFBFF
DATA &H7177,&HFBFF,&H0300,&HFBFF,&H0000,&HFBFF
DATA &H000D,&H0007,&HF8FF,&H0000,&H0000,&HF8FF,&H8898,&H7067
DATA &H7067,&HF8FF,&HA8DA,&H5025,&H5025,&HF8FF,&HA8DA,&H5025
DATA &H5025,&HF8FF,&HA8DA,&H5025,&H5025,&HF8FF,&H8888,&H7077
DATA &H7077,&HF8FF,&HF8FF,&H0000,&H0000,&HF8FF
DATA &H0009,&H0005,&H801F,&H801F,&H801F,&H801F,&H8086,&H8086
DATA &H8086,&H8086,&H0000,&H0000,&H0000,&H0000,&H8386,&H8386
DATA &H8386,&H8386,&H821F,&H821F,&H821F,&H821F
DATA &H0009,&H0005,&H00E0,&H0080,&H0000,&H00C0,&H0001,&H0000
DATA &H0058,&H0029,&H8061,&H81E1,&H81EF,&H00D2,&H0001,&H0100
DATA &H0158,&H0229,&H00E0,&H0180,&H0100,&H02C0
DATA &H0009,&H0005,&H03FC,&H03FC,&H03FC,&H03FC,&H90B0,&H90B0
DATA &H90B0,&H90B0,&H0000,&H0000,&H0000,&H0000,&H90B0,&H90B0
DATA &H90B0,&H90B0,&H03FC,&H03FC,&H03FC,&H03FC
DATA &H0009,&H0005,&H9C03,&H9000,&H0000,&H9801,&H0040,&H0000
DATA &H0B0D,&H054A,&H0CC3,&H9CC3,&H9DFB,&H9A25,&H0040,&H0000
DATA &H0B0D,&H054A,&H9C03,&H9000,&H0000,&H9801
DATA &H0007,&H0007,&HFEFE,&HFEFE,&HFEFE,&HFEFE,&H8282,&H8282
DATA &H0000,&H0000,&H8282,&H8282,&HFEFE,&HFEFE,&HFEFE,&HFEFE
DATA &H0007,&H0007,&H0000,&H0000,&H0000,&H0000,&H7C7C,&H007C
DATA &H7E02,&H807E,&H0000,&H7C00,&H0000,&H0000,&H0000,&H0000
DATA &H0007,&H0007,&HFEFE,&HFEFE,&HC6C6,&HC6C6,&H8282,&H8282
DATA &H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6,&HFEFE,&HFEFE
DATA &H0007,&H0007,&H0000,&H0000,&H3838,&H0038,&H7C04,&H007C
DATA &H7E02,&H807E,&H3C00,&H403C,&H0000,&H3800,&H0000,&H0000
DATA &H0007,&H0007,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &H0007,&H0007,&H3838,&H0038,&H7C04,&H007C,&H7E02,&H807E
DATA &H7E02,&H807E,&H7E02,&H807E,&H3C00,&H403C,&H0000,&H3800
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HF6F6,&HF6F6
DATA &HF6F6,&HF6F6,&HFAFA,&HFAFA
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H187C,&H0000,&H04FE
DATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038
DATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H0808,&H0008
DATA &H0808,&H0008,&H0404,&H0004
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HF6F6,&HF6F6
DATA &HF6F6,&HF6F6,&HF6F6,&HF6F6
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FE
DATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038
DATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H0808,&H0008
DATA &H0808,&H0008,&H0808,&H0008
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FE
DATA &H0000,&H04FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038
DATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H1010,&H0010
DATA &H1010,&H0010,&H1010,&H0010
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HDEDE,&HDEDE
DATA &HDEDE,&HDEDE,&HDEDE,&HDEDE
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H087C,&H0000,&H04FE
DATA &H0000,&H00FE,&H0000,&H00FE,&H0000,&H007C,&H0000,&H0038
DATA &H1010,&H0010,&H1010,&H0010,&H1010,&H0010,&H2020,&H0020
DATA &H2020,&H0020,&H2020,&H0020
DATA &H0007,&H000D,&HC6C6,&HC6C6,&H8282,&H8282,&H0000,&H0000
DATA &H0000,&H0000,&H0000,&H0000,&H8282,&H8282,&HC6C6,&HC6C6
DATA &HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HEEEE,&HDEDE,&HDEDE
DATA &HDEDE,&HDEDE,&HBEBE,&HBEBE
DATA &H0007,&H000D,&H0000,&H0038,&H0000,&H187C,&H0000,&H04FE

und so weiter und so fort.....

Also was bringt das jetzt genau??????
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 14.05.2005, 17:15    Titel: Antworten mit Zitat

Durch Data werden Datensätze in dein Programm "eingebettet", d.h. fest integriert. Du kannst sie mit READ lesen.
Genausogut könntest du ein Array erstellen, in dem du diese Daten speicherst:


Daten(0) = &H0005
Daten(1) = &H0007
...

Das ist aber wesentlich mehr Tipparbeit, außerdem muss das Array erst einmal (COMMON) SHARED deklariert werden, damit es in allen Prozeduren (SUBs und FUNCTIONs) verfügbar ist.


Wenn du dir (z.B. in der QB Onlinehilfe) die Syntax zu Read ansiehst, wirst du bemerken, dass du niemals angeben musst, welchen Datensatz du eigentlich lesen willst.
Gelesen wird ein Satz nach dem anderen. Bei der ersten READ-Anweisung der erste, bei der zweiten der zweite, u.s.w.
Wenn du einen Satz mehrmals einlesen möchtest, kannst du RESTORE verwenden. Nach einem RESTORE-Aufruf wird nocheinmal der selbe Datensatz gelesen. Nach 2 RESTOREs der vorletzte, u.s.w.

Ein Datensatz wird duch ein Komma vom nächsten abgetrennt.
In der ersten Zeile sind also 8 Datensätze gespeichert.


Und was genau steht jetzt da?
Gute Frage.
Generell sind es einfache einmal hexadezimale Zahlen; hexadezimal heißt, es gibt nicht nur die Ziffern von 0 - 9, sondern zusätzlich noch A,B,C,D,E und F.

A entspricht also 10 im dezimalen, F = 15.
Damit man nun weiß, ob eine Zahl dezimal oder hexadezimal sein soll, häng man an hex. zahlen einfach ein &H an. Es gibt auch die schreibweisen 0x... und ...h, die aber in QB uninteressant sind; es sin die schreibweisen anderer sprachen.
das ... steht dabei jeweils für die Zahl.

Und wozu das ganze in hex, wenns auch dezimal geht?
Wie du siehst, hat jede Zahl genau 4 Stellen; dem Programmierer ging es also darum, das ganzen optisch schön darzustellen; in der QB-Oberfläche, wo jedes Zeichen genau die selbe breite hat, hat auch jeder solche DATA-Block die selbe Zeilenlänge.
Und auch sonst hilft dieses Zählsystem, bestimmte Zusammenhänge hervorzuheben. Das wirst du später vllt einmal sehen.



Jetzt haben wir immer noch nicht die Bedeutung der DATA's...
Nun, genau sagen kann dir das wohl nur der Programmierer selbst. Oft wird auf diese Art und weise ein Maschinenspracheprogramm eingebunden; das ist ein Programm, das in ASSEMBLER geschrieben wurde, der sprache, die ein Prozessor versteht. solche Programme sind schneller, aber auch sehr viel schwieriger zu programmieren.
Ansonsten ist es möglich, dass er so einfach einige Konstanten untergebracht hat... die werden aber meinstens als dezimal bzw als string gespeichert.



Ich hoffe, das war jetzt verständlich.
Have a nice day
Ciao
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
NixAhnung



Anmeldungsdatum: 07.05.2005
Beiträge: 37

BeitragVerfasst am: 14.05.2005, 17:33    Titel: Antworten mit Zitat

Danke happy happy happy happy happy happy happy happy happy lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lächeln lachen lachen lachen lachen lachen lachen lachen lachen happy happy happy happy happy happy happy lächeln lächeln lächeln lächeln lächeln lächeln lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 14.05.2005, 19:50    Titel: Antworten mit Zitat

Einer hätts auch getann zwinkern
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 14.05.2005, 20:31    Titel: Antworten mit Zitat

hm dazu hab ich auch nochmal ne Frage:

Man liest das ganze also mit READ aus.
Aber wie arbeitet man genau damit und wo wird die Data, Read Methode preferiert?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 15.05.2005, 13:15    Titel: Ein Beispiel! Antworten mit Zitat

Ich denke mal, da ist ein Beispiel die beste Erklärung:

Code:

DECLARE SUB PsetTransA (x, y, col)

DATA 0, 0, 0, 0, 0, 0, 0, 0
DATA 0, 0, 0, 1, 1, 0, 0, 0
DATA 0, 0, 1, 0, 0, 1, 0, 0
DATA 0, 0, 1, 0, 0, 1, 0, 0
DATA 0, 1, 0, 0, 0, 0, 1, 0
DATA 0, 1, 1, 1, 1, 1, 1, 0
DATA 0, 1, 0, 0, 0, 0, 1, 0
DATA 0, 0, 0, 0, 0, 0, 0, 0


SCREEN 12
PsetTransA (100, 100, 15)


'----

SUB PsetTransA (x, y, col)

FOR yp = 1 TO 8
 FOR xp = 1 TO 8
  READ tmp
  IF tmp THEN PSET (x + xp, y + yp), col
 NEXT
NEXT

FOR dummy = 1 TO 64
 RESTORE
NEXT


In diesem Codebeispiel wird zuerst eine Bitmap von 8x8 Pixeln per DATA ins Programm eingebunden.
In der SUB wird dann Pixel für Pixel eingelesen. Wenn das Pixel ungleich 0 ist, (IF tmp THEN...), dann wird ein Pixel gezeichnet, ansonsten bleibt es transparent.
Eigentlich würde es sich lohnen, die Font-Data in eine externe Datei auszulagern; manchmal möchte man aber genau das vermeiden, z.B. weil die Daten nicht allzu leicht veränderbar sein sollen.

Eine besondere Bedeutung hat DATA/READ bei Maschinenspracheprogrammen; diese können so ganz bequem gespeichert und eingegeben werden. Anschließend muss man sie nur noch mit READ in ein Array laden, und per CALL ABSOLUTE aufrufen.
Allerdings wird davon eher abgeraten; praktischer ist es, das Assemblerprogramm einfach zur OBJ und dann zur LIB/QLB zu machen.
Die kann man zwar nur ab QB4.5 (vllt auch schon 3.0) einsetzen, sind aber wesentlich bequemer einsetzbar, da sie als "echte SUBs" behandelt werden.

Ich selbst muss sagen, dass ich DATA praktisch nie gebraucht habe.
Kleine Datenmengen kann man direkt in die entsprechenden Variablen schreiben, und bei größeren Datenmengen ist es sowiso sinnvoller, das ganze in eine Datei zu packen.

Aber wie so vieles: Das ist jedem selbst überlassen.
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 15.05.2005, 14:45    Titel: Antworten mit Zitat

Ähmm, wozu ist denn das
Code:

FOR dummy = 1 TO 64
 RESTORE
NEXT

gut?

Reicht da einmal nicht?!

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Stephan



Anmeldungsdatum: 05.10.2004
Beiträge: 358
Wohnort: Hessen - 20km Nördlich von Frankfurt am Main

BeitragVerfasst am: 15.05.2005, 14:53    Titel: Antworten mit Zitat

Jap, ein Restore reicht voll aus,
und wenn man z.b. mehrere DATA Felder hat, kann man es auch so machen




Code:

dt1:
DATA 1,2,3,4,5,6,7

dt2:
DATA 1234235,234,243,234,235,34,532

dt3:
DATA 1234,42,5243,5,43,324,5,7,89



RESTORE dt2


die Datas sind jetzt unwichtig, wichtig ist nur, das man hierbei sieht,
das der Nächste READ Befehl die daten einliest,
die nach dem Label dt2 stehen.
_________________
'Wir schätzen die Zeit erst, wenn uns nicht mehr viel davon geblieben ist.'
Leo Tolstoi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz