11. Lettura e Scrittura di file in Matlab Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Operazioni con i file Salvataggio e caricamento delle variabili del workspace Importazione di dati : Importazione di file dati Importazione di file di programmi per spreadsheet Uso del wizard per l’importazone Esportazione di dati Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Directory di importazione/esportazione Il workspace ha una directory direttamente (es. C:\Users\SimonaColucci\Documents\MATLAB) In generale, i file da importare/esportare si ritengono appartenenti a quella directory es. nomefile.txt equivale a C:\Users\SimonaColucci\Documents\MATLAB\ nomefile.txt Se si vuole importare/esportare file in directory diverse il nome del file deve essere fornito come path completo: es. C:\Users\SimonaColucci\Dropbox\Didattica\nomefile.txt Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Variabili del workspace Alternative di salvataggio/caricamento delle variabili del workspace e dei relativi valori Il comando save produce un file binario matlab.mat, che può essere ricaricato con il comando load per riprendere una sessione di lavoro Il comando save nomefile produce un file binario nomefile.mat che può essere ricaricato con il comando load nomefile per riprendere una sessione di lavoro Il comando save nomefile var1 var2 produce un file binario nomefile.mat che contiene solo le variabili var1 e var2 e può essere ricaricato con il comando load nomefile per riprendere una sessione di lavoro Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Importazione file dati Matlab accetta file dati Senza header (riga di intestazione o titolo) Costituiti da righe e colonne di dati I dati sulle righe devono essere separati da spazi Comando: load nomefile Se nomefile ha m righe con n valori verrà caricato in una matrice m*n con lo stesso nome ed elementi reali a precisione doppia Nomefile può avere qualsiasi estensione tranne .mat Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Funzione corrispondente al comando load: load(filename) differenzia il comportamento a seconda filename sia di tipoMAT o ascii load(filename,variables) seleziona le variabili da caricare da un file MAT load(filename,'-ascii') carica filename come un file ascii, indipendentemente dall’estensione load(filename,'-mat') carica filename come un file MAT, indipendentemente dall’estensione load(filename,'-mat',variables) gestisce filename come un file MAT, e ne carica solo alcune variabili Assegnazione esplicita dell’array restituito da load: S= load(…) Se il file è di tipo MAT, S è un array di strutture Se il file è di tipo ASCII, S è un array di reali a precisione doppia Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Importazione di file di programmi per spreadsheet Formato .xlsx (proprietario Microsoft Excel) e .xls (proprietario Microsoft Excel prima del 2007) Comandi: A=xlsread(‘nomefile’) registra nella matrice A i valori numerici nel file [A,B] =xlsread(‘nomefile’); registra nella matrice A i valori numerici nel file e nell’array di celle B i valori di tipo testo Formato .wk1 (usato in molti programmi per spreadsheet) Comando M=wk1read(‘nomefile’) registra nella matrice M i valori numerici nel file Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Esportazione Consente di trasferire i valori di una matrice in un file dati: valori numerici delimitati da spazi e disposti su righe successive Comandi: save dlmwrite fprintf Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Sintassi generale: Esempi Comando save Sintassi generale: save nomefile [oggetto del salvataggio] [qualificatori del formato di salvataggio] Esempi save my_data.out A –ASCII: salva i valori in A usando lo spazio come delimitatore nel file ASCII my_data.out save my_data.out A –ASCII -tabs: salva i valori in A usando la tabulazione come delimitatore nel file ASCII my_data.out Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
Funzione corrispondente al comando save: save(filename) salva le variabili del worskpace in filename di tipo MAT save(filename,variables) salva solo le variabili specificate del worskpace in filename di tipo MAT save(filename,variables,fmt) salva le variabili specificate nel formato indicato da fmt (es. –ascii) save(filename,variables,version) salva solo le variabili specificate del worskpace in filename di tipo MAT, nella versione di Matlab specificata da version save(filename,variables,'-append') se filename esiste già, scrive in coda al file (N.B. il resto delle chiamate sovrascrive file eventualmente esistenti!) Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
I parametri di save: variables Oggetto del salvataggio var1,...,varN Tutte le variabili elencate, I cui nomi sono passati tra apici ‘-regexp',expr1,...,exprN Le variabili il cui nome segue una delle espressioni regolari elencate, il cui nome va passato tra apici. Es, save('filename.mat','-regexp','^Mon','^Tues') salva solo le variabili che iniziano per ‘Mon’ e ‘Tues’ '-struct',structName I campi della struttura scalare structName come singole varibili del file. '-struct‘,structName,field1,...,fieldN I soli campi elencati della struttura scalare structName come singole varibili del file. Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
I parametri di save: fmt Formato del salvataggio '-mat' MAT-file '-ascii' Formato testo ad 8 cifre di precisione '-ascii','-tabs' Formato testo ad 8 cifre di precisione con tab delimitatore '-ascii','-double' Formato testo a 16 cifre di precisione '-ascii','-double','-tabs' Formato testo a 16 cifre di precisione con tab delimitatore Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
dlmwrite(filename,M,'-append') dlmwrite(___,Name,Value): La funzione dlmwrite dlmwrite(filename,M) scrive i valori numerici in M su un file ASCII (filename), separati da virgole. Se il file esiste lo sovrascrive dlmwrite(filename,M,'-append') appende in coda al file ASCII filename i valori numerici in M, separati da virgole dlmwrite(___,Name,Value): aggiunge ai parametri precedenti la possibilità di specificare il delimitatore, la precisione, il delimitatore di fine riga, gli scostamenti di riga e colonna, come coppie nome-valore . Es: dlmwrite('myFile.txt',M,'delimiter','\t','precision',3) dlmwrite(filename,M,delimiter) scrive i valori numerici in M su un file ASCII (filename), separati da “delimiter” dlmwrite(filename,M,delimiter,row,col) scrive i valori numerici iniziando dalla riga “row” e dalla colonna “col” di M su un file ASCII (filename), separati da “delimiter” Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017
fprintf(fileID,formatSpec,A1,...,An): La funzione fprintf fprintf(fileID,formatSpec,A1,...,An): scrive su un file di testo i valori in A1,...,An nel formato specificato da formatSpec fileID è l’identificatore di un file, restituito da una chiamata a fopen: fileID=fopen(“nomefile.txt”, “w”) “w” indica la modalità di apertura (sta per “write” e scrive da inizio file) Modalità alternative: “r” per read e “a” per append Esempio di utilizzo: fprintf(fileID,formatSpec,A1,...,An) fclose(fileID) Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017