WRITE
 |
ATTENTION! La syntaxe a changé en Gambas 3.
|
WRITE [ # Flux , ] Expression [ , Longueur ]
WRITE [ # Pointeur , ] Expression [ , Longueur ]
Ecrit une expression vers le
flux Flux en employant sa représentation binaire.
Si le
flux n'est pas indiqué, la sortie standard est employée.
Si
Expression est une chaîne, vous pouvez spécifier une
Longueur qui indique le nombre d'octets à écrire. Si aucune longueur n'est spécifiée pour une chaîne, la longueur est directement écrite vers le
flux juste avant les données de la chaîne.
 |
Cette instruction utilise l'ordre des octets du flux pour écrire les données.
|
Si vous indiquez un
pointeur au lieu d'un
Stream, alors les données seront écrites directement à l'adresse mémoire spécifiée par le pointeur.
 |
Si vous écrivez a une adresse mémoire interdite, vous obtiendrez une erreur. L'interpréteur ne plantera pas.
|
Faites attention au type de donnée de l’argument Expression
 |
Le type de donnée de Expression est utilisé pour connaître exactement ce qui doit être écrit dans le flux. Méfiez vous, ce n’est pas nécessairement ce que vous pensez.
Par exemple, si vous avez une référence anonyme sur un objet (c.a.d. si vous utilisez le type de donnée Object ), alors le type de donnée de chacune de ses propriétés sera un Variant, et non le type réel. Donc WRITE écrira un variant, ce n’est pas ce que vous attendiez.
Si vous utilisez une référence d’objet dont le type de donnée est déclaré à la compilation, vous n’aurez pas ce problème.
Si vous n’êtes pas certain, la manière la plus sure est d’utiliser une variable intermédiaire locale d’un type bien connu, ou une conversion explicite.
DIM hStream AS Stream ' Le flux
DIM hObject AS Object ' Un objet avec une propriété float appelée "Value"
DIM fValue AS Float ' Nous voulons écrire une propriété float
' La mauvaise manière
WRITE #hStream, hObject.Value
' La bonne
fValue = hObject.Value
WRITE #hStream, fValue
' Une autre bonne façon
WRITE #hStream, CFloat(hObject.Value)
|
Exemple
... ' Les octets suivants seront écrits dans le flux (notation hexadécimale) :
WRITE #hfile, "123456789" ' 09 31 32 33 34 35 36 37 38 39
WRITE #hfile, "123456789", 0 ' 09 31 32 33 34 35 36 37 38 39
WRITE #hfile, "123456789", 4 ' 31 32 33 34
WRITE #hfile, "123456789", 11 ' 31 32 33 34 35 36 37 38 39 00 00
WRITE #hfile, "123456789", -2 ' Rien ne sera écrit dans le flux.
...
Cet exemple montre comment écrire un fichier binaire. Il lit ensuite le fichier créé pour afficher son contenu.
PUBLIC SUB ButtonWriteBinary_Click()
DIM filePath AS String
' Crée un fichier temporaire
filePath = Temp()
' Écris le fichier binaire
BinaryWrite(filePath)
' Affiche le fichier binaire
BinaryRead(filePath)
' Efface le fichier temporaire
KILL filePath
CATCH
Message.Error(Error.Text)
END
PRIVATE SUB BinaryWrite(FilePath AS String)
DIM binaryFile AS File
DIM i AS Integer = 10
DIM b AS Byte = 4
DIM s AS Short = 23
DIM s1 AS String = "Ceci est la chaîne 1"
DIM s2 AS String = "Une autre chaîne"
' Ouvre en créant le fichier, ainsi nous en obtenons un nouveau
binaryFile = OPEN FilePath FOR CREATE
WRITE #binaryFile, i
WRITE #binaryFile, b
WRITE #binaryFile, s
WRITE #binaryFile, s1
WRITE #binaryFile, s2
CLOSE #binaryFile
END
PRIVATE SUB BinaryRead(FilePath AS String)
DIM binaryFile AS File
DIM i AS Integer
DIM b AS Byte
DIM s AS Short
DIM s1 AS String
DIM s2 AS String
' Lis le fichier binaire
binaryFile = OPEN FilePath FOR READ
READ #binaryFile, i
READ #binaryFile, b
READ #binaryFile, s
READ #binaryFile, s1
READ #binaryFile, s2
CLOSE #binaryFile
' Affiche le résultat
PRINT i
PRINT b
PRINT s
PRINT s1
PRINT s2
END