Gestione File: differenze tra le versioni

Da Bioingegneria Elettronica e Informatica.
(Esempi Applicativi: File di testo)
(Copia del contenuto di un file in un altro file)
Riga 193: Riga 193:
  
 
<syntaxhighlight lang="matlab" line>
 
<syntaxhighlight lang="matlab" line>
%% Copia contenuto file di testo
+
%% Copia del contenuto di un file di testo in un altro file di testo
clear;
+
clc;
+
  
 
% Inizializzazione delle variabili
 
% Inizializzazione delle variabili

Versione delle 12:38, 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

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.

  1. %% Scrittura file di testo
  2.  
  3. % Inizializzazione delle variabili
  4. N = 10;
  5. v = [];
  6.  
  7. % Acquisizione da tastiera degli elementi del vettore
  8. for i = 1 : N
  9.     v(i) = input('');
  10. end
  11.  
  12. % Apertura file in modalità scrittura
  13. fileID = fopen('vettore.txt','w');
  14. % In questo momento, se il file non esiste, viene creato
  15.  
  16. % Ciclo per la scrittura di tutti gli elementi sul file
  17. for i = 1 : N
  18.     fprintf(fileID, '%d ', v(i));
  19. end
  20.  
  21. % Chiusura del file
  22. fclose(fileID);
  23.  
  24. %% Riferimenti utili
  25. %
  26. % # https://it.mathworks.com/help/matlab/ref/fopen.html
  27. % # https://it.mathworks.com/help/matlab/ref/fprintf.html
  28. % # https://it.mathworks.com/help/matlab/ref/fclose.html
  29. %

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.

  1. %% Lettura file di testo
  2.  
  3. % Inizializzazione delle variabili
  4. N = 10;
  5. V = [];
  6.  
  7. % Apertura del file in modalità lettura
  8. fileID = fopen('vettore.txt','r');
  9. for i = 1 : N
  10.     V(i) = fscanf(fileID, '%d', 1);
  11. end
  12.  
  13. % Chiusura del file
  14. fclose(fileID);
  15.  
  16. % Ciclo per la stampa a video degli elementi del vettore V
  17. for i = 1 : N
  18.     disp(V(i));
  19. end
  20.  
  21.  
  22. %% Riferimenti utili
  23. %
  24. % # https://it.mathworks.com/help/matlab/ref/fopen.html
  25. % # https://it.mathworks.com/help/matlab/ref/fscanf.html
  26. % # https://it.mathworks.com/help/matlab/ref/fclose.html
  27. %
  28.  
  29. == Esempi Applicativi: File di testo ==
  30. === Scrittura su file ===
  31. 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.
  32. <syntaxhighlight lang="matlab" line>
  33.  
  34. %% Scrittura file di testo
  35.  
  36. % Inizializzazione delle variabili
  37. N = 10;
  38. v = [];
  39.  
  40. % Acquisizione da tastiera degli elementi del vettore
  41. for i = 1 : N
  42.     v(i) = input('');
  43. end
  44.  
  45. % Apertura file in modalità scrittura
  46. fileID = fopen('vettore.txt','w');
  47. % In questo momento, se il file non esiste, viene creato
  48.  
  49. % Ciclo per la scrittura di tutti gli elementi sul file
  50. for i = 1 : N
  51.     fprintf(fileID, '%d ', v(i));
  52. end
  53.  
  54. % Chiusura del file
  55. fclose(fileID);
  56.  
  57. %% Riferimenti utili
  58. %
  59. % # https://it.mathworks.com/help/matlab/ref/fopen.html
  60. % # https://it.mathworks.com/help/matlab/ref/fprintf.html
  61. % # https://it.mathworks.com/help/matlab/ref/fclose.html
  62. %

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'.

  1. %% Copia del contenuto di un file di testo in un altro file di testo
  2.  
  3. % Inizializzazione delle variabili
  4. V = [];
  5. N = 10;
  6.  
  7. % Apertura del file originale in modalità lettura
  8. fileID = fopen('originale.txt','r');
  9.  
  10. % Ciclo per la lettura da file degli elementi del vettore
  11. for i = 1 : N
  12.     V(i) = fscanf(fileID, '%d ', 1);
  13. end
  14.  
  15. % Chiusura del file
  16. fclose(fileID);
  17.  
  18. % Apertura del file copia in modalità scrittura
  19. fileID = fopen('copia.txt','w');
  20.  
  21. % Ciclo per la stampa su file degli elementi del vettore V
  22. for i = 1 : N
  23.      fprintf(fileID, '%d ', V(i));
  24. end
  25.  
  26. % Chiusura del file
  27. fclose(fileID);
  28.  
  29. %% Riferimenti utili
  30. %
  31. % # https://it.mathworks.com/help/matlab/ref/fopen.html
  32. % # https://it.mathworks.com/help/matlab/ref/fscanf.html
  33. % # https://it.mathworks.com/help/matlab/ref/fclose.html
  34. %