Successivo: , Precedente: , Su: Esempi di estensione   [Contenuti][Indice]


17.7.9 Scaricare e ricaricare un vettore

L’estensione rwarray aggiunge due funzioni, di nome writea() e reada(), come segue:

@load "rwarray"

Questo è il modo per caricare l’estensione.

ret = writea(file, vettore)

Questa funzione ha come argomento una stringa, che è il nome del file sul quale scaricare il vettore, e il vettore stesso è il secondo argomento. writea() è in grado di gestire vettori di vettori. Restituisce il valore uno se completa il lavoro o zero se non va a buon fine.

ret = reada(file, vettore)

reada() è la funzione inversa di writea(); legge il file il cui nome è fornito come primo argomento, riempiendo il vettore il cui nome è il secondo argomento. Il vettore viene preventivamente svuotato. Anche in questo caso, il valore restituito è uno se tutto va bene o zero se la funzione non va a buon fine.

Il vettore creato da reada() è identico a quello scritto da writea() nel senso che i contenuti sono gli stessi. Tuttavia, per come è strutturata la funzione, l’ordine di attraversamento del vettore ricreato è quasi certamente differente da quello del vettore originale. Poiché l’ordine di attraversamento di un vettore è, per default, indefinito in awk, questo non è (tecnicamente) un problema. Se serve che l’attraversamento del vettore avvenga in un ordine preciso, si possono usare le funzionalità di ordinamento di un vettore disponibili in gawk (vedi la sezione Controllare la visita di un vettore e il suo ordinamento).

Il file contiene dati in formato binario. Tutti i valori interi sono scritti in network byte order117. Tuttavia, i valori in virgola mobile a doppia precisione sono scritti come dati binari nativi. Quindi, vettori che contengono solo dati in formato stringa possono essere scaricati da un sistema con un certo ordine di byte e ripristinati su un sistema con un ordine di byte differente, anche se un test al riguardo non è mai stato fatto.

Ecco un esempio:

@load "rwarray"
…
ret = writea("scaricato.bin", vettore)
…
ret = reada("scaricato.bin", vettore)

Note a piè di pagina

(117)

Cioè, nella maniera con cui sarebbero normalmente scritti in un testo, con le cifre più significative del numero contenute nella parte sinistra, e quelle meno significative nella parte destra della rappresentazione binaria del numero.


Successivo: , Precedente: , Su: Esempi di estensione   [Contenuti][Indice]