Samstag, 16. März 2013

Datei Input / Output in C++: Teil II - Datei-Input

Um Informationen aus Dateien lesen zu können, wird wieder der Header fstream benötigt. In diesem wird die Klasse ifstream definiert. Von dieser kann man eine Variable mit beliebigem Namen erstellen. Meist wird die Variable jedoch fin (für file-input) genannt, um die Nähe zu cin (console-input) kenntlich zu machen.
#include <fstream>
ifstream fin;
Nun muss man seine Variable noch mit einer Datei verknüpfen, dies kann durch die Funktion open() realisiert werden.
fin.open("file.txt");
Da es jedoch zu Fehlern kommen kann, wenn man eine Datei öffnet, die nicht existiert, sollte man nach dem Öffnen der Datei prüfen, ob die Datei auch wirklich geöffnet wurde. Für diesen Zweck wird die Funktion is_open() bereitgestellt.
fin.open("file.txt");
if (!fin.is_open())
{
    exit(EXIT_FAILURE);
}
Die Funktion exit() ist sehr nützlich um ein Programm schnell zu beenden, sie wird in der Header-Datei cstdlib bereitgestellt.
Es gibt verschiedene Wege um Informationen aus einer Datei zu lesen, den >> Operator, die Funktion get(), sowie die Funktion getline(). Möchte man z.B. einer Integer Variablen einen Wert aus der Datei zuweisen, so kann man dies mit >> realisieren.
int i=0;
fin >> i;
Dies geht natürlich nur, wenn in der Datei auch an erster Stelle ein Integer-Wert steht. Handelt es sich bei der Datei um eine Textdatei, so kann man mit get() einzelne Zeichen und mit getline() ganze Zeilen lesen.
char ch;
char line[50];
fin.get(ch);
fin.getline(line, 50);
Die Funktion getline() benötigt als Argument ein Array von char Werten. Es liest die Zeile soweit, bis sie entweder endet, oder bis das Array voll ist, d.h. in diesem Beispiel die ersten 50 Zeichen.
Wenn man alle Informationen aus der Datei gelesen hat, sollte man diese mit der Funktion close() abschließen.
fin.close();
Hier könnt ihr euch einen Beispielcode ansehen oder herunterladen.

Dienstag, 12. März 2013

Datei Input / Output in C++: Teil I - Datei-Output

Die meisten Programme arbeiten mit Dateien. Texteditoren, um Text zu Speichern bzw. zu Lesen oder Spiele um z.B. Speicherstände zu Laden bzw. zu Schreiben. Wie die grundlegende Datei Ein- und Ausgabe funktioniert, soll in dieser zweiteiligen Reihe erklärt werden. Da das Schreiben in eine Datei etwas einfacher ist, als aus einer Datei zu Lesen, werde ich mit Datei-Output beginnen.

In eine Datei zu schreiben ist nicht viel schwieriger, als Text auf die Konsole auszugeben ( cout ). Man muss jedoch anstatt die Header-Datei iostream (input-output-stream) den Header fstream (file-stream) einbinden.
#include <fstream>
Nun kann man sich eine Variable des Typs ofstream erstellen, diese kann man benennen wie man möchte, es bietet sich jedoch fout (für file-out) an, um die Ähnlichkeit zu cout (console-out) erkenntlich zu machen.
ofstream fout;
Diese Variable kann nun mit einer Datei verknüpft werden. Die Klasse ofstream stellt dazu die Funktion open() bereit. Diese erhält als Argument den Pfad zu der Datei, mit welcher man arbeiten möchte. Ist diese Datei nicht vorhanden, so wird automatisch eine leere Datei mit dem übergebenen Namen erstellt. Gibt man keinen speziellen Pfad an, so sucht das Programm im Verzeichnis, in welchem es ausgeführt wird nach der Datei bzw. erstellt sie dort.
fout.open("foo_bar.txt");
Nun kann man fout genau wie cout verwenden, der Unterschied ist jedoch, dass die Ausgabe nicht auf die Konsole geleitet wird sondern in die Datei.
fout << "Ausgabe des Programms" << endl;
Einen Beispielcode könnt ihr euch hier ansehen, oder herunterladen.