WRITE
WRITE [ # NomeStream , ] Espressione [ , Lunghezza ]
WRITE [ # Puntatore , ] Espressione [ , Lunghezza ]
Scrive un'espressione nello
stream NomeStream usando la loro rappresentazione binaria.
Se lo
stream non viene specificato, allora viene usata l'uscita predefinita (standard output).
Se
Espressione è una stringa, è possibile specificare in
Lunghezza il numero di bites da scrivere. Se nessuna lunghezza viene specificata per la stringa in questione , allora la sua lunghezza nello
stream viene scritta prima della stringa stessa.
 |
I dati con questa istruzione, vengono scritti nello stream in ordine di byte del flusso.
|
Se invece viene specificato un puntatore (
Pointer) al posto di uno
Stream, allora i dati saranno scritti direttamente in memoria, all'indirizzo specificato nel puntatore.
 |
Se cercate di scrivere in un'indirizzo di memoria non accessibile, otterrete un'errore gestito dall'interprete che non andrà in crash (ottimo).
|
Valutazioni importanti sul tipo di dati usati nell'argomento Espressione.
 |
Il tipo di dati in Espressione è utilizzato per sapere esattamente cosa scrivere nello stream. Attenzione che non è quello che necessariamente si pensa.
Per esempio, se abbiamo un riferimento anonimo su un'oggetto (object) utilizzando per esempio il tipo di dati Object, allora il tipo di dati di una delle sue proprietà sarà di tipo Variant, ma non è questo il tipo di dato reale. WRITE scriverà un Variant che non è quello che ci si aspettavamo.
Se non siete sicuri dell'esattezza del tipo di dati utilizzato. è meglio usare una variabile intermedia con un tipo di dati conosciuto frutto di una conversione esplicita, oppure direttamente una funzione di conversione esplicita.
DIM hStream AS Stream ' Lo stream
DIM hObject AS Object ' Un oggetto con una proprietà che si chiama "Valore" di tipo virgola mobile.
DIM fValue AS Float ' Dove scriveremo il valore in vorgola mobile della proprietà.
' Modo sconsigliato!
WRITE #hStream, hObject.Value
' Modo suggerito.
fValue = hObject.Value
WRITE #hStream, fValue
' Un modo più compatto e più veloce (non occorre nessuna variabile intermedia).
WRITE #hStream, CFloat(hObject.Value)
|
Esempio
...
' I seguenti bytes saranno scritti nello stream in notazione esadecimale:
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 ' Niente sarà scritto nello stream.
'Notare che se _Lunghezza_ equivale 0 (seconda riga) il flusso dei dati viene scritto per intero.
...
Questo esempio illustra come scrivere dei dati binari su di un file, creando poi uno stream in lettura per confermare il contenuto del file.
PUBLIC SUB ButtonWriteBinary_Click()
DIM filePath AS String
' Fa uso di un file temporaneo.
filePath = Temp()
' Scrive il file binario.
BinaryWrite(filePath)
' Visualizza il file binario.
BinaryRead(filePath)
' Cancella il file temporaneo.
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 = "Questa è la stringa 1"
DIM s2 AS String = "Qualcos'altro"
' Apre con CREATE ottenendo un nuovo file.
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
' Legge il file binario.
binaryFile = OPEN FilePath FOR READ
READ #binaryFile, i
READ #binaryFile, b
READ #binaryFile, s
READ #binaryFile, s1
READ #binaryFile, s2
CLOSE #binaryFile
' Stampa il risultato.
PRINT i
PRINT b
PRINT s
PRINT s1
PRINT s2
END