Home > lang > write 
 en fr de es nl pl pt pt_BR mk sq ca hu cs tr ar fa id vi ko ja ru zh zh_TW eo
Precedente  Successivo  Modifica  Rinomina  Undo  Refresh  Search  Amministrazione  
Documentazione
History
 
Attenzione! Questa pagina non è aggiornata.  Vedi versione in inglese 
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

Vedi anche

Funzioni di Stream e Input/Output, Stream.ByteOrder, Rappresentazione binaria dei dati, External Function Management