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.
Ces fonctions ne doivent pas être utilisées dans un thread.
DescriptionDataSection
Début d'une zone de données.
Exemple
DataSection DonneesNumeriques: Data.i 100, 200, -250, -452, 145 DonneesTexte: Data.s "Bonjour", "Qu'est-ce", "que ", "c'est ?" EndDataSection
DescriptionEndDataSection
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
DescriptionData.NomType
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
DataSection Divers: Data.l 100, 200, -250, -452, 145 Data.s "Bonjour", "Qu'est", "ce que ", "c'est ?" EndDataSectionPour 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 Divers: 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
DescriptionRestore label
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
DescriptionRead[.<type>] <variable>
Lit la donnée suivante et par défaut, la donnée suivante est la première donnée déclarée.
Le pointeur peut être modifié en utilisant la commande Restore.
<type> est le type de données à lire et s'il n'est pas spécifié le type par défaut qui est 'Integer' sera utilisé. Il est toutefois conseillé d'utiliser le type ad-hoc afin d'éviter le message d'erreur qui apparaîtra quand vous lirez des datas de type 'String' et pour éviter une confusion de type 'Integer' qui est un type 'Long' pour les compilateurs 32 bits et qui est un type 'Quad' pour les compilateurs 64 bits.
Exemple
Restore DonneesTexte Read.s MonPremierTexte$ Restore DonneesNumeriques Read a ; Attention, le compilateur lira un 'Integer' (Un 'Long' en 32 bits ou un 'Quad' en 64 bits) Read.q b Read c ; Attention, le compilateur lira un 'Quad' si c'est un compilateur 64 bits même si les données sont 'Long' ! Read.l d Debug MonPremierTexte$; Affiche Hello Debug a ; Affiche 100 Debug b ; Affiche 111111111111111111 Debug c ; Attention, l'affichage dépend du compilateur ! : 200 en 32 bits ou 1288490189000 en 64 bits Debug d ; Idem : 300 en 32 bits ou 400 en 64 bits End DataSection DonneesNumeriques: Data.i 100 Data.q 111111111111111111 Data.l 200, 300, 400 DonneesTexte: Data.s "Bonjour", "Qu'est-ce", "que ", "c'est ?" EndDataSection