Gestione File: differenze tra le versioni
(→Copia del contenuto di un file in un altro file) |
(→Esempi Applicativi: File di testo) |
||
Riga 192: | Riga 192: | ||
Esiste un file di testo, chiamato 'originale.txt' che contiene N elementi interi. Si vuole leggere il file e copiare tutti i suoi elementi in un altro file di testo chiamato 'copia.txt'. | Esiste un file di testo, chiamato 'originale.txt' che contiene N elementi interi. Si vuole leggere il file e copiare tutti i suoi elementi in un altro file di testo chiamato 'copia.txt'. | ||
− | %% | + | <syntaxhighlight lang="matlab" line> |
+ | %% Copia contenuto file di testo | ||
+ | clear; | ||
+ | clc; | ||
% Inizializzazione delle variabili | % Inizializzazione delle variabili | ||
− | |||
V = []; | V = []; | ||
+ | N = 10; | ||
− | % Apertura del file in modalità lettura | + | % Apertura del file originale in modalità lettura |
− | fileID = fopen(' | + | fileID = fopen('originale.txt','r'); |
+ | |||
+ | % Ciclo per la lettura da file degli elementi del vettore | ||
for i = 1 : N | for i = 1 : N | ||
− | V(i) = fscanf(fileID, '%d', 1); | + | V(i) = fscanf(fileID, '%d ', 1); |
end | end | ||
Riga 207: | Riga 212: | ||
fclose(fileID); | fclose(fileID); | ||
− | % Ciclo per la stampa | + | % Apertura del file copia in modalità scrittura |
+ | fileID = fopen('copia.txt','w'); | ||
+ | |||
+ | % Ciclo per la stampa su file degli elementi del vettore V | ||
for i = 1 : N | for i = 1 : N | ||
− | + | fprintf(fileID, '%d ', V(i)); | |
end | end | ||
+ | % Chiusura del file | ||
+ | fclose(fileID); | ||
%% Riferimenti utili | %% Riferimenti utili |
Versione delle 12:37, 2 dic 2016
Vitoantonio Bevilacqua vitoantonio.bevilacqua@poliba.it
Antonio Brunetti antonio.brunetti@poliba.it
Sommario. Il presente paragrafo si riferisce alle lezioni del I Modulo di Informatica : Fondamenti di Informatica per il nuovo corso di laurea triennale in Ingegneria dei Sistemi Medicali del Dipartimento di Ingegneria Elettrica e dell'Informazione del Politecnico di Bari.
Parole chiave: Input/Output, File di testo, File Binari.
ATTENZIONE !!! - PAGINA IN ALLESTIMENTO
Indice
Introduzione
La lettura da tastiera, cosi come la stampa a video, non sono gli unici modi di gestire l'input/output in Matlab. Infatti, analogamente alle funzioni precedenti, esistono dei metodi che permettono la la scrittura e la lettura sui files. Il sistema di input/output del Matlab, cosi come molti altri linguaggi di programmazione (p.e. il C) fornisce un’interfaccia indipendente dal particolare dispositivo su cui viene eseguito l’accesso, poiché questo è associato ad un flusso di informazioni (stream).
Esistono due tipi di flussi che si comportano allo stesso modo:
- flussi di testo - sequenze di caratteri;
- flussi binari - una sequenze di byte con corrispondenza uno ad uno con quelli della periferica esterna.
Apertura e Chiusura di un file
L'operazione di apertura di un file, senza la quale non sarebbe possibile effettuare le altre operazioni, consente di accedervi e di associare ad esso uno specifico riferimento (o handle). Per poter utilizzare un file, quindi aprirlo, si utilizza la funzione fopen la cui sintassi è la seguente:
fileID = fopen(filename,permission)
dove fileID è il riferimento al file restituito dalla funzione fopen (-1 se l'operazione di apertura non va a buon fine), filename è la stringa contenente il nome (percorso) del file da leggere/scrivere, mentre permission permette di definire la modalità di accesso al file. Tutte le specifiche si trovano nella documentazione della funzione fopen; di seguito sono riportate le modalità più comuni di accesso al file.
permission | descrizione |
---|---|
'r' | Apertura del file in modalità lettura. |
'w' | Apertura del file in modalità scrittura. Se il file non esiste, viene creato; se il già file esiste, il suo contenuto viene perso. |
'a' | Apertura del file in modalità append. I dati inseriti vengono aggiunti a quelli già all'interno del file. |
'r+' | Apre il file in modalità lettura, ma consente anche operazioni di scrittura. |
'w+' | Apre il file in modalità scrittura, ma consente anche operazioni di lettura. |
'a+' | Apre il file in modalità append, ma consente anche operazioni di lettura. |
Una volta terminate le operazioni su un file, è buona prassi chiudere quel file. Per fare ciò si utilizza la funzione fclose la cui sintassi è la seguente:
fclose(fileID)
Lettura e scrittura formattata
Una volta aperto il file con la funzione fopen, avendo cura di scegliere la modalità opportuna, è possibile accedervi attraverso le seguenti funzioni:
- fprintf per scrivere sul file;
- fscanf per leggere da file.
Scrittura su file
fprintf(fileID, formatSpec, A1, ..., An)
La funzione fprintf scrive sul file indicato da fileID i dati contenuti negli elementi A1, ..., An formattato secondo formatSpec. Studiando la documentazione relativa alla funzione fprintf è possibile notare che esistono una moltitudine di operatori di formattazione. Tra i più comuni ci sono i seguenti:
Operatore | Descrizione |
---|---|
%d (o %i) | Intero con segno |
%f | Numero in virgola mobile |
%c (%s) | Singolo carattere (Stringhe) |
Lettura da file
A = fscanf(fileID, formatSpec, sizeA)
La funzione fscanf legge dal file indicato da fileID e salva il suo contenuto nella struttura dati A interpretandoli secondo lo l'operatore di formattazione indicato da formatSpec. Gli operatori di formattazione sono analoghi a quelli indicati nella sezione precedente. Ulteriori dettagli si possono trovare sulla documentazione ufficiale della funzione fscanf.
Esempi Applicativi: File di testo
Scrittura su file
Si acquisiscono da tastiera gli elementi di un vettore di lunghezza pari a N; una volta acquisiti, scrivo tutti gli elementi su un file di testo nominato 'vettore.txt' nella directory corrente.
%% Scrittura file di testo
% Inizializzazione delle variabili
N = 10;
v = [];
% Acquisizione da tastiera degli elementi del vettore
for i = 1 : N
v(i) = input('');
end
% Apertura file in modalità scrittura
fileID = fopen('vettore.txt','w');
% In questo momento, se il file non esiste, viene creato
% Ciclo per la scrittura di tutti gli elementi sul file
for i = 1 : N
fprintf(fileID, '%d ', v(i));
end
% Chiusura del file
fclose(fileID);
%% Riferimenti utili
%
% # https://it.mathworks.com/help/matlab/ref/fopen.html
% # https://it.mathworks.com/help/matlab/ref/fprintf.html
% # https://it.mathworks.com/help/matlab/ref/fclose.html
%
Lettura da file
Esiste un file di testo, chiamato 'vettore.txt' che contiene N elementi interi. Si vuole leggere il file, salvare tutti gli elementi in esso contenuti in un vettore V e stampare a video tali elementi.
%% Lettura file di testo
% Inizializzazione delle variabili
N = 10;
V = [];
% Apertura del file in modalità lettura
fileID = fopen('vettore.txt','r');
for i = 1 : N
V(i) = fscanf(fileID, '%d', 1);
end
% Chiusura del file
fclose(fileID);
% Ciclo per la stampa a video degli elementi del vettore V
for i = 1 : N
disp(V(i));
end
%% Riferimenti utili
%
% # https://it.mathworks.com/help/matlab/ref/fopen.html
% # https://it.mathworks.com/help/matlab/ref/fscanf.html
% # https://it.mathworks.com/help/matlab/ref/fclose.html
%
== Esempi Applicativi: File di testo ==
=== Scrittura su file ===
Si acquisiscono da tastiera gli elementi di un vettore di lunghezza pari a N; una volta acquisiti, scrivo tutti gli elementi su un file di testo nominato 'vettore.txt' nella directory corrente.
<syntaxhighlight lang="matlab" line>
%% Scrittura file di testo
% Inizializzazione delle variabili
N = 10;
v = [];
% Acquisizione da tastiera degli elementi del vettore
for i = 1 : N
v(i) = input('');
end
% Apertura file in modalità scrittura
fileID = fopen('vettore.txt','w');
% In questo momento, se il file non esiste, viene creato
% Ciclo per la scrittura di tutti gli elementi sul file
for i = 1 : N
fprintf(fileID, '%d ', v(i));
end
% Chiusura del file
fclose(fileID);
%% Riferimenti utili
%
% # https://it.mathworks.com/help/matlab/ref/fopen.html
% # https://it.mathworks.com/help/matlab/ref/fprintf.html
% # https://it.mathworks.com/help/matlab/ref/fclose.html
%
Copia del contenuto di un file in un altro file
Esiste un file di testo, chiamato 'originale.txt' che contiene N elementi interi. Si vuole leggere il file e copiare tutti i suoi elementi in un altro file di testo chiamato 'copia.txt'.
%% Copia contenuto file di testo
clear;
clc;
% Inizializzazione delle variabili
V = [];
N = 10;
% Apertura del file originale in modalità lettura
fileID = fopen('originale.txt','r');
% Ciclo per la lettura da file degli elementi del vettore
for i = 1 : N
V(i) = fscanf(fileID, '%d ', 1);
end
% Chiusura del file
fclose(fileID);
% Apertura del file copia in modalità scrittura
fileID = fopen('copia.txt','w');
% Ciclo per la stampa su file degli elementi del vettore V
for i = 1 : N
fprintf(fileID, '%d ', V(i));
end
% Chiusura del file
fclose(fileID);
%% Riferimenti utili
%
% # https://it.mathworks.com/help/matlab/ref/fopen.html
% # https://it.mathworks.com/help/matlab/ref/fscanf.html
% # https://it.mathworks.com/help/matlab/ref/fclose.html
%