Data

Einführung

PureBasic erlaubt die Benutzung von Data, um vordefinierte Blöcke mit Informationen innerhalb Ihres Programms zu speichern. Dies ist sehr nützlich für Standard-Werte eines Programms (Sprachen-Strings zum Beispiel) oder, in einem Spiel, zum Definieren eines (vorberechneten) Sprite-Weges.

DataSection muss zuerst aufgerufen werden, um den nachfolgenden Data Abschnitt anzukündigen. Dies bedeutet, dass alle Sprungmarken (Labels) und Data Komponenten in der Data Sektion des Programms gespeichert werden, welche einen viel schnelleren Zugriff als die Code Sektion hat. Data wird benutzt zum Eingeben der Daten. EndDataSection muss angegeben werden, wenn nach der Data Sektion weiterer Programmcode folgt. Einer der Vorteile ist, dass Sie ohne Probleme verschiedene Data Sektionen in ihrem Code definieren können. Die Restore und Read Befehle werden benutzt, um die Daten auszulesen.

Befehle


Syntax

  DataSection
Beschreibung
Beginnt eine Data Sektion.

Syntax

  EndDataSection
Beschreibung
Beendet eine Data Sektion.

Syntax

  Data.TypName
Beschreibung
Definiert Daten. Der Typ kann nur ein einfacher Basic Typ (Integer, Long, Word, Byte, Ascii, Unicode, Float, Double, Quad, Character, String) sein. Eine beliebige Anzahl Daten kann sich auf einer Zeile befinden, jede abgegrenzt durch ein Komma ','.

Beispiel:

  Data.l 100, 200, -250, -452, 145
  Data.s "Hello", "This", "is ", "What ?"
Für fortgeschrittene Programmierer: es ist auch möglich, eine Prozedur-Adresse oder die Adresse einer Sprungmarke innerhalb eines Data-Blocks zu speichern, wenn dessen Typ auf Integer (.i) gesetzt wird. (Die Verwendung des Typs 'Integer' speichert die auf 32Bit- bzw. 64Bit Umgebungen (verschiedenen) Adressen korrekt.) Dies kann verwendet, um z.B. einfach virtuelle Funktionstabellen aufzubauen.

Beispiel:

  Procedure Max(Number, Number2)
  EndProcedure
  
  Label:
    
  DataSection
    Data.i ?Label, @Max()
  EndDataSection

Beispiel:

  Interface MyObject
    DoThis()
    DoThat()
  EndInterface

  Procedure This(*Self)
    MessageRequester("MyObject", "This")
  EndProcedure

  Procedure That(*Self)
    MessageRequester("MyObject", "That")
  EndProcedure

  m.MyObject = ?VTable

  m\DoThis()
  m\DoThat()


  DataSection
    VTable:
      Data.i ?Procedures
    Procedures:
      Data.i @This(), @That()
  EndDataSection

Syntax
  
Restore Label
Beschreibung
Dieses Schlüsselwort ist nützlich, um die Startposition für ein nachfolgendes Read auf eine angegebene Sprungmarke (Label) zu setzen. Alle für diesen Zweck verwendeten Sprungmarken sollten sich innerhalb einer DataSection befinden, da die Daten beim Kompilieren als ein vom Programmcode seperater Block behandelt werden und möglicherweise von einer Sprungmarke getrennt werden, wenn die Sprungmarke außerhalb der DataSection platziert wurde.

Beispiel:

  Restore StringData
  Read.s MyFirstData$
  Read.s MySecondData$
  
  Restore NumericalData
  Read.l a
  Read.l b

  Debug MyFirstData$
  Debug a
  
  End  
  
  DataSection
    NumericalData:    
      Data.l 100, 200, -250, -452, 145
      
    StringData:
      Data.s "Hello", "This", "is ", "What ?"
  EndDataSection

Syntax

  Read[.<Typ>] <Variable>
  
Beschreibung
Liest die nächsten verfügbaren Daten ein. Die nächsten verfügbaren Daten können mittels des Restore Befehls geändert werden. Standardmäßig sind die nächsten verfügbaren Daten die zuerst deklarierten Daten. Der Typ der zu lesenden Daten wird durch den 'Typ'-Suffix festgelegt. Der Standard-Typ wird verwendet, wenn dieser nicht angegeben wird.