Data

Introduction

PureBasic autorise l'utilisation de données pour stocker des blocs d'informations prédéfinies dans votre programme. Ceci est utile pour disposer de valeurs par défaut (messages textuels par exemple) ou dans un jeu pour définir le cheminement prédéfini d'un sprite.

DataSection doit être placé en tête du bloc de données. Tous les labels et composants data sont stockés dans cette partie data dont l'accès est plus rapide que la zone de code. Data est utilisé pour entrer des données. EndDataSection doit être spécifié si du code à exécuter est situé après. Il est intéressant de pouvoir placer plusieurs zones de données à différents endroits du code source. Les données peuvent être chargées à l'aide des commandes Restore et Read.

Syntax
DataSection
Description
Début d'une zone de données.

Exemple

  DataSection
    DonneesNumeriques:    
      Data.l 100, 200, -250, -452, 145
      
    DonneesTexte:
      Data.s "Bonjour", "Qu'est-ce", "que ", "c'est ?"
  EndDataSection

Syntax
EndDataSection
Description
Fin d'une zone de données.

Exemple

  DataSection
    DonneesNumeriques:    
      Data.l 100, 200, -250, -452, 145
      
    DonneesTexte:
      Data.s "Bonjour", "Qu'est-ce", "que ", "c'est ?"
  EndDataSection

Syntax
Data.NomType
Description
Définit les données. Le type peut être choisi parmi les types natifs (integer, long, word, byte, ascii, unicode, float, double, quad, character, string). Un nombre quelconque de données peut être placé sur une même ligne, chacune étant séparée par une virgule.

Exemple

  Data.l 100, 200, -250, -452, 145
  Data.s "Bonjour", "Qu'est", "ce que ", "c'est ?"
Pour les programmeurs chevronnés: il est aussi possible de mettre l'adresse d'une procédure ou d'un label avec Data si le type 'entier' (integer .i) est utilisé. Sur un système 32 bits les adresses seront stockées sur 4 octets et sur 8 octets sur un système 64 bits.
Par exemple, des tables de fonctions virtuelles peuvent être créées facilement.

Exemple

  Procedure Max(Nombre, Nombre2)
  EndProcedure
  
  Etiquette:
    
  DataSection
    Data.i ?Etiquette, @Max()
  EndDataSection

Exemple

  Interface MonObjet
     FaireCeci()
     FaireCela()
  EndInterface

  Procedure Ceci(*Self)
     MessageRequester("MonObjet", "Ceci")
  EndProcedure

  Procedure Cela(*Self)
     MessageRequester("MonObjet", "Cela")
  EndProcedure

  m.MonObjet = ?VTable

  m\FaireCeci()
  m\FaireCela()


  DataSection
     VTable:
        Data.i ?Procedures
     Procedures:
        Data.i @Ceci(), @Cela()
  EndDataSection

Syntax
Restore label
Description
Ce mot clef permet de placer un indicateur de début de zone pour la commande Read. Le label utilisé par cette commande doit être déclaré dans le bloc DataSection, car il sera déplacé lors de la création de l'exécutable.

Exemple

  Restore DonneesTexte
  Read.s MonPremierTexte$
  Read.s MonSecondTexte$
  
  Restore DonneesNumeriques
  Read.l a
  Read.l b
  
  Debug MonPremierTexte$
  Debug a
  
  End  

  DataSection
  
    DonneesNumeriques:    
      Data.l 100, 200, -250, -452, 145
      
    DonneesTexte:
      Data.s "Bonjour", "Qu'est-ce", "que ", "c'est ?"
  EndDataSection

Syntax
  Read[.<type>] <variable>
Description
Lit la donnée suivante. Le pointeur peut être modifié en utilisant la commande Restore. Par défaut, la donnée suivante est la première donnée déclarée.

Exemple

  Restore DonneesTexte
  Read.s MonPremierTexte$
  Read.s MonSecondTexte$
  
  Restore DonneesNumeriques
  Read.l a
  Read.l b
  
  Debug MonPremierTexte$
  Debug MonSecondTexte$
  Debug a
  Debug b
  
  End  

  DataSection
  
    DonneesNumeriques:    
      Data.l 100, 200, -250, -452, 145
      
    DonneesTexte:
      Data.s "Bonjour", "Qu'est-ce", "que ", "c'est ?"
  EndDataSection