back to top

Leggere e scrivere su file di testo con C++

Spesso, ci si può trovare in condizione di interagire con un file come strumento di input o di output per i nostri programmi.

Per quanto riguarda l’utilizzo di file come input, pensiamo ad esempio a tutti quei casi in cui è necessario rielaborare in qualche modo un testo, ad esempio ordinarlo secondo un particolare criterio. O ancora alle situazioni in cui il programma da scrivere si inserisce a valle di un progetto che produce come risultato un file, che deve essere quindi letto per immagazzinare i risultati delle elaborazioni svolte fino a quel punto.

Anche servirsi di un file come output è un’operazione molto comune, dato che consente di tenere traccia dei risultati ottenuti salvandoli su disco, consentendo quindi successive analisi e rielaborazioni, oltre a costituire una valvola di controllo per eventuali errori.

In questo articolo, ci concentreremo sugli strumenti che consentono di interagire con i file come sorgente e destinazione di dati, cioè come input e come output. Utilizzeremo uno dei linguaggi di programmazione più comuni, versatili ed efficaci, ovvero il C++.

Lettura da file

#include <fstream.h>

void main() 
{
  ifstream OpenFile("cpp-input.txt");
  char ch;
  while(!OpenFile.eof())
  {
    OpenFile.get(ch);
    cout << ch;
  }
  OpenFile.close();
}

Il progamma soprastante consente di leggere i dati contenuti in un file, un carattere alla volta. Ipotizzeremo infatti in questo contesto che si tratti di un file testuale, l’adattamento a un diverso tipo di dato risulta in ogni caso estremamente semplice e le considerazioni proposte hanno validità generale.

Esaminiamo le caratteristiche del programma. La prima riga (#include <fstream.h>) consente di utilizzare la libreria fstream, dedicata proprio all’interazione con i file.

La funzione main contiene il codice che viene eseguito una volta lanciato il programma. Le prime due righe, ovvero: ifstream OpenFile("cpp-input.txt") e char ch corrispondono alla dichiarazione di due variabili.

La variabile OpenFile, di tipo ifstream, rappresenta il file da cui verranno letti i dati, il cui nome ("cpp-input.txt") viene passato come parametro (assicuriamoci che il file da cui vengono letti i dati sia presente nella cartella del programma o comunque al percorso indicato, in caso contrario avremo un errore in fase di esecuzione) mentre la variabile ch, di tipo char (ovvero carattere) servirà per memorizzare il contenuto del file stesso, in questo caso un carattere alla volta.

L’istruzione while(!OpenFile.eof()) identifica un ciclo, ovvero una serie di operazioni da compiere ripetutamente fino a che non si verifica una determinata condizione, in questo caso fino a che il file non termina: ! indica infatti la negazione, mentre eof sta per "end of file", cioè "fine del file". L’istruzione può quindi essere letta come "fino a che non finisce il file…".

Le operazioni da compiere fino a che non termina la lettura sono comprese tra due parentesi graffe, si tratta di: OpenFile.get(ch) e cout << ch. Tramite la funzione get si memorizza il carattere corrente del file nella variabile ch, proseguendo nella lettura, mentre l’istruzione cout consente di stampare tale carattere a video, per verificare il corretto funzionamento del programma.

Una volta concluso il ciclo, non resta che chiudere lo stream, ovvero il flusso di dati, proveniente dal file in ingresso, tramite l’istruzione OpenFile.close().

Scrittura su file

#include <fstream.h>

void main()
{
ofstream SaveFile("cpp-output.txt");
SaveFile << "Test di scrittura su file";
SaveFile.close();
}

In questo caso invece, proviamo a scrivere una frase di esempio ("Test di scrittura su file"), sul file di testo di nome cpp-output.txt. Qualora il file da aprire in scrittura non sia presente ne verrà creato uno vuoto con il nome specificato.

Ancora una volta, ci serviamo della libreria fstream (#include <fstream.h>) e inseriamo le istruzioni da eseguire all’interno della funzione main.

Il file su cui scrivere dovrà in questo caso essere dichiarato come un oggetto di tipo ofsream, scegliamo come nome della variabile ad esso associata SaveFile (ofstream SaveFile("cpp-output.txt")).

A questo punto possiamo stampare una frase su SaveFile semplicemente ricalcando la sintassi del comando cout, che ci ha consentito nell’esempio precedente di stampare a video: SaveFile << "Test di scrittura su file".

Non resta che chiudere il flusso di dati aperto questa volta in scrittura, sempre tramite il comando close: SaveFile.close().

Altri contenuti interessanti

Pubblicità

Leggi anche...

Radice quadrata in C: vediamo come calcolarla in diversi modi

La radice quadrata è un'operazione matematica piuttosto comune (in...

Sperimentare la sequenza di Collatz in C++

Vediamo come verificare la congettura di Collatz con C++....

Calcolare la radice quadrata con Python

In Python è possibile calcolare la radice quadrata usando...

12 film che ogni programmatore dovrebbe guardare (per trovare ispirazione e creatività)

Molti ragazzi hanno deciso di intraprendere una carriera da...

Cartonizzare una foto con Python e la libreria OpenCV

La cartoonization è una procedura grafica che consente di...

Creare flowchart (diagrammi di flusso) online: 5 strumenti gratuiti

Hai bisogno di realizzare una flow chart ma non...
Pubblicità