READ
Variable = READ [ # Stream ] AS Datatype
Variable = READ [ # Stream , ] Length
Lettura di un tipo di dati specifico
La prima sintassi legge il flusso
Stream come dati binari il cui tipo è specificato dall'argomento
Datatype. La rappresentazione binaria è quella usata dall'istruzione
WRITE.
Se lo stream non è specificato, viene utilizzato lo standard input.
Il tipo di dati restituito può essere uno dei seguenti:
NULL,
Boolean,
Byte,
Short,
Integer,
Long,
Pointer,
Single,
Float,
Data (Date),
String,
Variant, any
Array,
Collection o struttura.
Durante la lettura di una stringa, la lunghezza della stringa deve precedere il contenuto della stringa nei dati del flusso,
come specificato in
Rappresentazione binaria dei dati.
Se il contenuto del flusso non può essere interpretato, viene generato un errore.
Questa istruzione utilizza l'ordine dei byte dello stream per leggere i dati.
Lettura di qualsiasi oggetto
Dal 3.15
Qualsiasi oggetto può essere deserializzato, a condizione che la sua classe implementi il metodo speciale
_read.
Se l'oggetto è stato precedentemente serializzato nello stream nel modo giusto, viene ricostruito chiamando il suo costruttore senza argomenti, quindi viene chiamato il metodo
_read.
Si legge l'oggetto utilizzando una delle seguenti sintassi:
Object = READ #Stream As <ObjectClass>
Object = READ #Stream As Object
Object = READ #Stream As Variant
Se leggi l'oggetto usando
'As Variant'
o
'As Object'
, devi poi scriverlo usando
'As Variant'
o
'As Object'
.
Perché in tal caso il nome della classe oggetto è necessario per essere scritto nel flusso. Altrimenti l'istruzione
READ non ha il nome della classe necessario per istanziare l'oggetto.
Lettura del contenuto di una stringa
La seconda sintassi legge dal flusso
Stream un numero di byte specificato dall'argomento
Length e lo restituisce come una stringa.
Se
Length è negativo, allora i byte di (-
Length) vengono letti al massimo fino alla fine del flusso.
Se lo stream non è specificato, viene utilizzato lo standard input.
Compatibilità con Gambas 2
WRITE #Stream, Expression
in Gambas 2.0 scrive la forma binaria di
Expression.
In Gambas 3.0 scrive
Expression come una stringa.
Pertanto
DEVI controllare tutte le tue istruzioni
WRITE durante la conversione di un progetto Gambas dalla versione 2.0 alla 3.0 e
specificare il
Datatype AS
quando necessario.
Di default, il compilatore supporta la vecchia sintassi READ e WRITE in quanto compatibile.
Se vuoi rilevare dove dovresti riscrivere la tua sintassi READ / WRITE, puoi
compilare il tuo progetto a mano con il flag "--no-old-read-write-syntax". Quindi
l'argomento
Length di WRITE diventa obbligatorio se si utilizza la seconda sintassi.
L'utilizzo di
Pointer come stream non è più possibile. Crea invece uno stream di memoria con l'istruzione
MEMORY.
Vedi anche