Lektion 81:

Dateien

Das Lesen und Beschreiben von Dateien ist wirklich einfach. Dazu gibt es die Klassen ifstream (für Eingabe) und ofstream (für Ausgabe). Der Konstruktor bekommt als Argument den Dateinamen. Ansonsten werden diese Objekte dieser Klassen verwendet wie cin und cout.

Normalerweise nenne ich die Variablen, die die Datei-Objekte beinhalten nur in oder out.

Das folgende Programm schreibt einen Bäckerwitz in die Datei "witz.txt":

#include<fstream>
using namespace std;

void main()
{
   ofstream out("witz.txt");
   out<<"Es kommt ein Mann zum Baecker und sagt: Ich moechte 99 Broetchen."<<endl;
   out<<"Da fragt der Baecker: Duerfen es auch 100 sein?"<<endl;
   out<<"Der Mann antwortet: Nein, wer koennte denn so viele essen?"<<endl;
};

Zum Einlesen wird ein entsprechendes Objekt der Klasse ifstream verwendet. Um nicht darauf achten zu müssen, wie viele Zeichen ausgegeben werden sollen, gibt es die Methode eof() (end of file), die angibt, ob die Datei vollständig eingelesen wurde.

Eingelesen werden kann der Witz wieder mit folgendem Programm:

#include <fstream>
#include <iostream>
using namespace std;

void main()
{
   ifstream in("witz.txt");
   while(!in.eof())
   {
      char ch;
      in>>ch;
      cout<<ch;
   };
};

Oh! Die Ausgabe, die entsteht ist fast lustiger, als der Witz. Alle Leerzeichen und Zeilenumbrüche sind verschwunden. Das liegt am operator<<. Er verwirft einfach alle Leerzeichen und Zeilenumbrüche. Das läßt sich mit der get-Methode umgehen. Sie liest einfach das nächst Zeichen ein, auch wenn es ein Leerzeichen oder ein Zeilenumbruch ist.

#include <fstream>
#include <iostream>
using namespace std;

void main()
{
   ifstream in("witz.txt");
   while(!in.eof())
   {
      char ch;
      ch=in.get();
      cout<<ch;
   };
};

Übung

Das Programm hat ein Zeichen zu viel ausgegeben. Das liegt daran, daß das Ende der Datei noch nicht erkannt wird, wenn das letzte gültige Zeichen gelesen wurde, sondern erst, wenn über das Dateiende hinaus gelesen wurde. Dieses eine zuviel gelesene Zeichen soll nicht ausgegeben werden. Korrigieren Sie das Programm.



Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00