File con dati in formato matlab

Il modo più semplice di salvare le variabili, i vettori e le matrici in Matlab è il comando save:

>> save nomefile.mat 
>> save('nomefile.mat');

che salva tutto il workspace nel file "nomefile.mat". I file di tipo .mat sono file proprietari di Matlab e quindi sono leggibili solo da Matlab. Questi file sono più compatti e leggibili più rapidamente da Matlab, viene mantenuta inoltre la separazione tra le variabili.

Per salvare solo alcune variabili è sufficiente inserire il loro nome in aggiunta. Per esempio se si vogliono salvare il vettore "v" e la matrice "M" contenute nel workspace il comando è:

>> save nomefile.mat v M
>> save ('nomefile.mat','v','M');

L'operazione duale di caricamento è:

>> load nomefile.mat
>> load('nomefile.mat');

che carica le variabili contenute nel file nomefile.mat, che di conseguenza vengono rese disponibili nel workspace. Se la variabile è già presente nel workspace, l'operazione di caricamento la sovrascrive.

Se per caso si vuole caricare la variabile "a" presente il nomefile.mat è sufficiente utilizzare

 

>> load nomefile.mat a
>> load('nomefile.mat','a');
File con dati in formato ascii

Volendo invece salvare i dati in formato ASCII, in modo tale che siano leggibili anche all'esterno con un normale editor o word processor è necessario usare l'opzione -ascii:

>> M = magic(3)
M =

8 1 6
3 5 7
4 9 2

>> save nomefile.dat M -ascii
>> save ('nomefile.dat','M','-ascii');

 

nel file nomefile.dat viene salvata la matrice M in formato ascii, qui sotto è riportato il contenuto del file come appare in un word processor:

   8.0000000e+00   1.0000000e+00   6.0000000e+00
   3.0000000e+00   5.0000000e+00   7.0000000e+00
   4.0000000e+00   9.0000000e+00   2.0000000e+00

I file sono salvati come valori a singole precisione separati da uno spazio. L'estensione del file.dat può cambiare, questo però modifica il programma con cui viene aperto dal sistema operativo se viene fatto un "doppio click" sull'icona del file.

Aggiungendo -double i dati vengono salvati a doppia precisione e -tabs sostituisce lo spazio con una tabulazione:

 

>> save nomefile.dat M -ascii -tabs
>> save ('nomefile.dat','M','-ascii','-tabs');

produce questo risultato in nomefile.dat:

   8.0000000000000000e+00       1.0000000000000000e+00       6.0000000000000000e+00    
   3.0000000000000000e+00       5.0000000000000000e+00       7.0000000000000000e+00   
   4.0000000000000000e+00       9.0000000000000000e+00       2.0000000000000000e+00   

 

In teoria sarebbe possibile salvare più variabili in formato ascii nello stesso file, tuttavia è una pratica sconsigliata perché in fase di caricamento Matlab non è in grado di comprendere la separazione tra le variabili. Di conseguenza è consigliato salvare sempre una sola variabile per file in formato ascii (si ricorda che questa limitazione non esiste se si salva in formato Matlab).

L'operazione duale di caricamento di una variabile da un file .dat (quindi ascii) è:

>> load nomefile.dat
>> load ('nomefile.dat');

in questo caso però la variabile caricata viene chiamata automaticamente nomefile. Se si vuole dargli un nome alternativo è necessario utilizzare la seconda forma di caricamento:

>> a =  load ('nomefile.dat');
INPUT E OUTPUT FORMATTATO

 

Matlab include un insieme di funzioni di I/O di basso livello basate sullo standard C.

Per leggere o scrivere un file è necessario seguire il seguente schema:

  1. aprire il file utilizzando la funzione fopen(). Tale funzione restituisce un identificatore di file da usare con tutte le altre funzioni
  2. operare sul file:
    • leggere dati binari con la funzione fread()
    • scrivere dati binari con la funzione fwrite()
    • leggere stringhe di testo linea per linea utilizzando le funzioni fgets() / fgetl()
    • leggere dati formattati ASCII usando la funzione fscanf()
    • scrivere dati formattati ASCII usando la funzione fprintf()
  3. chiudere il file usando la funzione fclose()

Ad esempio, per leggere 1000 interi a 16 bit memorizzati in formato binario si utilizzano le seguenti istruzioni:

>> fid = fopen(‘nome file’);
>> [dati, contatore] = fread(fid, 1000, ‘int16’)
>> fclose

i dati sono memorizzati nel vettore dati e il numero di interi effettivamente letto è contenuto in contatore.

Ultime modifiche: lunedì, 1 gennaio 2024, 15:28