Tiedostojen käsittely C++:ssa on vain cin ja cout - tietovirtoja vastaavien tietovirtojen käsittelyä.
Olkoon meillä tiedosto nimeltä luvut.dat:
13.4 23.6 kissa 1.9 <EOF> <- ei aina välttämättä mikään merkki
Kirjoitetaan esimerkkitiedoston luvut lukeva ohjelma C++:n tietovirroilla. Tarkoitus on hylätä ne rivit, joiden alussa ei ole reaalilukua:
// Ohjelma lukee tiedostosta luvut.dat lukuja ja tulostaa niiden
// summan ja keskiarvon. Jos tiedostossa on virheellisiä
// rivejä, tulostetaan ne.
#include <iostream>
#include <stdio>
#include <fstream> // File stream
#include <string>
using namespace std;
int main(void)
{
double luku,summa,ka;
string s;
int n;
ifstream fi("luvut.dat");
if ( !fi ) {
cout << "Tiedosto ei aukea!" << endl;
return 1;
}
summa = 0.0;
n = 0;
ka = 0.0;
while ( getline(fi,s) ) {
if ( sscanf(s.c_str(),"%lf",&luku) <= 0 ) {
cout << s << "\n";
continue;
}
summa += luku;
n++;
}
fi.close();
if ( n > 0 ) ka = summa/n;
cout.precision(2); cout.setf(ios::showpoint | ios::fixed);
cout << "\n";
cout << "Lukuja oli " << n << " kappaletta\n";
cout << "Niiden summa oli " << summa << "\n";
cout << "ja keskiarvo oli " << ka << endl;
return 0;
}
Tiedostossa oli seuraavat laittomat rivit: kissa Lukuja oli...