Argomento13 Gestione dei filecesposito/materiale/lezioni/Argomento13_Gesti… · Apertura/Chiusura...

Preview:

Citation preview

FondamentidiInformaticaGest ionede i F i le in MATLAB

Prof. Chr i st ian Espos i toCorso d i Laurea in Ingegner ia Meccanica e Gest iona le (C lasse I )A .A . 2017/18

GestionedeifileinMATLAB

OUTLINE

•Caratteristiche dei File

•Apertura/Chiusura di File

•Scrittura/Lettura da File

• Importare Dati da File

GestionedeifileinMATLAB 02/38

CaratteristichedeiFile• I file possono essere visti come dei contenitoripermanenti di informazioni

• Il Sistema Operativo si occupa della loro gestioneed offre la possibilità, agli sviluppatori, di:• Apertura/chiusura di un file• Lettura/scrittura di un file• Ecc.

GestionedeifileinMATLAB 03/38

Apertura/ChiusuradiFile– 1/2fid = fopen(percorso_del_file, modalita_apertura)

• Tramite fopen è possibile aprire un file, memorizzato nel percorso indicato dapercorso_del_file nella modalità d’apertura specificata damodalita_apertura

• La modalità di apertura (modalita_apertura) può essere:• Scrittura(modalita_apertura =‘w’)• Lettura(modalita_apertura =‘r’)• Scritturaelettura(modalita_apertura =‘w+’ emodalita_apertura =‘r+’)• Append (modalita_apertura = ‘a’):apreunfileesistenteocreaunnuovofileinscritturaconposizionamentoallafinedelfile.

• La funzione fopen restituisce il valore fid, che è un identificatore associato al fileaperto

Sintassi

GestionedeifileinMATLAB 04/38

Apertura/ChiusuradiFile– 2/2fclose(fid)

• Chiude il file identificato da fid

• Esempio utilizzo fopen e fclose

Sintassi

>> fid = fopen('C:\test.txt', 'r');>> fclose(fid);

GestionedeifileinMATLAB 05/38

Apertura/ChiusuradiFile– 2/2fclose(fid)

• Chiude il file identificato da fid

• Esempio utilizzo fopen e fclose

Sintassi

>> fid = fopen('C:\test.txt', 'r');>> fclose(fid);

• Percorso: C:\test.txt• Modalità di apertura: lettura (‘r’)

GestionedeifileinMATLAB 06/38

ScritturadiunFile(1/2)• Alcune funzioni per la scrittura su file• Il file deve essere precedentemente aperto mediante lafopen

• fwrite• Scrive un array, passato come parametro, su un filespecificato• help fwrite per maggiori dettagli

• fprintf• Scrive su file, secondo un formato specificato dall’utente• help fpritnf per maggiori dettagli

GestionedeifileinMATLAB 07/38

ScritturadiunFile(2/2)• cont = fwrite(fid, array, formato)• cont: indica il numero di valori effettivamente scritti nelfile• fid: identificatore del file su cui scrivere (nb: il file deveessere stato aperto in precedenza)• array: array contenente i dati da salvare• formato: specifica il formato in cui i dati verrannosalvati. Formati principali:• char, int8, int16, int32, int64, float32, float64 (i numeriindicano il numero di bit usati per rappresentare ivalori)

GestionedeifileinMATLAB 08/38

LetturadaFile(1/2)• Alcune funzioni per la lettura da file• Il file deve essere precedentemente aperto mediante lafopen

• fread• Legge un array, di lunghezza specificata, da un file indicatotramite parametro• help fread per maggiori dettagli

• fscanf• Legge da file, specificando esplicitamente il formato di talidati• help fscanf per maggiori dettagli

GestionedeifileinMATLAB 09/38

LetturadaFile(2/2)• [array cont]=fread(fid, size, formato)• cont, fid, e formato hanno il significato per fwrite• I dati letti vengono memorizzati in array, e size è ladimensione dei dati da leggere. Tre possibilità• n: legge esattamente n valori. Dopo l’esecuzione diquesta istruzione array sarà un vettore colonnacontenente questi n valori• Inf: legge fino alla fine del file. Dopo l’esecuzione diquesta istruzione array sarà un vettore colonnacontenente tutti i valori letti• [n m]: legge esattamente nxm valori. Dopol’esecuzione di questa istruzione array sarà unamatrice nxm contenente tutti i valori letti

GestionedeifileinMATLAB 10/38

EsempiodiScritturaeLetturadaFile(1/2)% genera un vettore riga contenente numeri casualia=rand(1,1000);%richiede all'utente il nome del filefilename=input('inserisci un nome di file ');[fid msg]=fopen(filename, 'w'); %apre il file%se il file e` stato aperto con successo...if(fid>0)

cont=fwrite(fid,a,'float64'); %scrive a su file%informa l'utente dell'avvenuta scritturadisp([num2str(cont) ' valori scritti...']);fclose(fid); %chiude il file

elsedisp(msg);

end

GestionedeifileinMATLAB 11/38

EsempiodiScritturaeLetturadaFile(2/2)% genera un vettore riga contenente numeri casualia=rand(1,1000);%richiede all'utente il nome del filefilename=input('inserisci un nome di file ');[fid msg]=fopen(filename, ’r'); %apre il file%se il file e` stato aperto con successo...if(fid>0)

[vett cont]=fread(fid,[1 1000],'float64');%informa l'utente dell'avvenuta letturadisp([num2str(cont) ' valori letti...']);fclose(fid); %chiude il file

elsedisp(msg);

end

GestionedeifileinMATLAB 12/38

ImportareDatidaFile– 1/4• Con la funzione importdata è possibile diimportare dati da diversi tipi di file:• Testuali• CSV• Ecc.

• Non è necessario che il file sia stato apertoprecedentemente (tramite fopen)

• help importdata per maggiori dettagli

GestionedeifileinMATLAB 13/38

ImportareDatidaFile– 2/4

>> A = importdata(‘matrice.txt’);

A =

1 4 64 2 56 5 4

1, 4, 64, 2, 56, 5, 4 matrice.txt

Esempio1

GestionedeifileinMATLAB 14/38

ImportareDatidaFile– 2/4

>> A = importdata(‘matrice.txt’);

A =

1 4 64 2 56 5 4

1, 4, 64, 2, 56, 5, 4 matrice.txt

Lavirgola(simbolo,)èinterpretatacomeseparatoredi

colonne

Esempio1

GestionedeifileinMATLAB 15/38

ImportareDatidaFile– 3/4

>> A = importdata(‘matrice.txt’, ‘ ’);

A =

1 4 64 2 56 5 4

1 4 64 2 56 5 4 matrice.txt

Esempio2

GestionedeifileinMATLAB 16/38

ImportareDatidaFile– 3/4

>> A = importdata(‘matrice.txt’, ‘ ’);

A =

1 4 64 2 56 5 4

1 4 64 2 56 5 4 matrice.txt

Èpossibilespecificareancheundelimitatoredicolonneinimportdata

(spazio nell’esempio)

Esempio2

GestionedeifileinMATLAB 17/38

ImportareDatidaFile– 4/4Studenti/Voti esame Esame1 Esame2 Esame3 Esame4 Esame5

Matricola1 28 25 30 23 19

Matricola 2 24 27 28 21 24

Matricola 3 25 25 19 18 22

Matricola 4 21 30 30 22 30

Esempio3

GestionedeifileinMATLAB 18/38

ImportareDatidaFile– 4/4

Studenti/Voti, E1, E2, E3, E4, E5Matricola 1, 28, 25, 30, 23, 19Matricola 2, 24, 27, 28, 21, 24Matricola 3, 25, 25, 19, 18, 22Matricola 4, 21, 30, 30, 22, 30

vs.txt

Studenti/Voti esame Esame1 Esame2 Esame3 Esame4 Esame5

Matricola1 28 25 30 23 19

Matricola 2 24 27 28 21 24

Matricola 3 25 25 19 18 22

Matricola 4 21 30 30 22 30

Esempio3

GestionedeifileinMATLAB 19/38

ImportareDatidaFile– 4/4

Studenti/Voti, E1, E2, E3, E4, E5Matricola 1, 28, 25, 30, 23, 19Matricola 2, 24, 27, 28, 21, 24Matricola 3, 25, 25, 19, 18, 22Matricola 4, 21, 30, 30, 22, 30

vs.txt

Nomedelfile

Studenti/Voti esame Esame1 Esame2 Esame3 Esame4 Esame5

Matricola1 28 25 30 23 19

Matricola 2 24 27 28 21 24

Matricola 3 25 25 19 18 22

Matricola 4 21 30 30 22 30

Esempio3

GestionedeifileinMATLAB 20/38

ImportareDatidaFile– 4/4

>> file = importdata(‘vs.txt’);file =

data: [4x5 double]textdata: {5x6 cell}

Studenti/Voti, E1, E2, E3, E4, E5Matricola 1, 28, 25, 30, 23, 19Matricola 2, 24, 27, 28, 21, 24Matricola 3, 25, 25, 19, 18, 22Matricola 4, 21, 30, 30, 22, 30

vs.txt

Esempio3

GestionedeifileinMATLAB 21/38

ImportareDatidaFile– 4/4

>> file = importdata(‘vs.txt’);file =

data: [4x5 double]textdata: {5x6 cell}

Studenti/Voti, E1, E2, E3, E4, E5Matricola 1, 28, 25, 30, 23, 19Matricola 2, 24, 27, 28, 21, 24Matricola 3, 25, 25, 19, 18, 22Matricola 4, 21, 30, 30, 22, 30

vs.txt

Tuttiidatinumericivengonoimmagazzinatiindata

Esempio3

GestionedeifileinMATLAB 22/38

ImportareDatidaFile– 4/4

>> file = importdata(‘vs.txt’);file =

data: [4x5 double]textdata: {5x6 cell}

Studenti/Voti, E1, E2, E3, E4, E5Matricola 1, 28, 25, 30, 23, 19Matricola 2, 24, 27, 28, 21, 24Matricola 3, 25, 25, 19, 18, 22Matricola 4, 21, 30, 30, 22, 30

vs.txt

textdata conterràtuttiidatitestuali(es.,intestazione

dellerigheecolonne)

Esempio3

GestionedeifileinMATLAB 23/38

ImportareDatidaFile– 4/4>> file = importdata(‘vs.txt’);

file = data: [4x5 double]

textdata: {5x6 cell}

>> file.textdata

ans =

'Studenti/Voti' ' E1' ' E2' ' E3' ' E4' ' E5''Matricola 1' '' '' '' '' '' 'Matricola 2' '' '' '' '' '' 'Matricola 3' '' '' '' '' '' 'Matricola 4' '' '' '' '' ''

Esempio3

GestionedeifileinMATLAB 24/38

ImportareDatidaFile– 4/4>> file = importdata(‘vs.txt’);

file = data: [4x5 double]

textdata: {5x6 cell}

>> A = file.data

A =

28 25 30 23 1924 27 28 21 2425 25 19 18 2221 30 30 22 30

Esempio3

GestionedeifileinMATLAB 25/38

ImportareDatidaFileTramiteInterfacciaGrafica

• Tramite uiimport è possibile selezionare, tramiteinterfaccia grafica, diverse opzioni per l’import didati:• Tipo di separatore di colonna• Quante righe/colonne occupa l’intestazione• Ecc.

• Non è necessario che il file sia stato apertoprecedentemente (tramite fopen)

GestionedeifileinMATLAB 26/38

>> uiimport('data.txt')

ImportareDatidaFileTramiteInterfacciaGrafica

GestionedeifileinMATLAB 27/38

>> uiimport('data.txt')

ImportareDatidaFileTramiteInterfacciaGrafica

‘data.txt’ èilpercorsodelfile

GestionedeifileinMATLAB 28/38

>> uiimport('data.txt')

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio1

GestionedeifileinMATLAB 29/38

>> uiimport('data.txt')

Selezionedelseparatoredicolonne

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio1

GestionedeifileinMATLAB 30/38

>> uiimport('data.txt')

Numerodilineedell’intestazione

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio1

GestionedeifileinMATLAB 31/38

>> uiimport('data.txt')

Anteprimadelcontenutodelfile

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio1

GestionedeifileinMATLAB 32/38

>> uiimport('data.txt')

Anteprimadiciòcheverràimportato

(data)

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio1

GestionedeifileinMATLAB 33/38

>> uiimport('data.txt')

Anteprimadiciòcheverràimportato

(textdata)

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio1

GestionedeifileinMATLAB 34/38

>> uiimport('data.txt')

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio2

GestionedeifileinMATLAB 35/38

>> uiimport('data.txt')

Selezioniamocosaimportareall’internodelnostroworkspace

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio2

GestionedeifileinMATLAB 36/38

>> uiimport('data.txt')

Anteprimadellavariabileselezionata

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio2

GestionedeifileinMATLAB 37/38

◦ Cliccando su Finish, nel nostro Workspace diMATLAB, saranno importate le variabiliselezionate ed avranno i valori vistinell’anteprima

ImportareDatidaFileTramiteInterfacciaGrafica|Passaggio3

GestionedeifileinMATLAB 38/38