Schreiben und Lesen von Textdateien
Eine Textdatei enthält, wie der Name schon sagt, richtigen,
von Menschen lesbaren Text.
Die Informationen werden also nicht wie bei den bisher behandelten
Binärdateien einfach 1:1 vom Speicher in die Datei geschoben
und zurück, sondern in richtige, formatierte,
druckreife Buchstabencodes umgewandelt.
Geöffnet und geschlossen werden diese Dateien ebenfalls
mit fopen und fclose,
die Navigation funktioniert ebenso wie in Binärdateien;
zum Lesen und Schreiben werden jedoch die Funktionen fscanf und fprintf
verwendet.
Dies sind Funktionen aus den scanf/printf - Familien
und funktionieren haargenau so wie scanf und printf auf dem Bildschirm,
nur muß für unsere Zwecke vor dem Formatbezeichner
noch die Anrede der Datei gegeben werden.
Die Ausgabe unserer Funktionen ist natürlich auch nicht auf dem Bildschirm
sichtbar, sondern erfolgt nur in der Datei.
Beispiel:
#include <stdio.h>
void main(void)
{
FILE *stream; // Dateivariable
int a=3,b=678; // zwei Integerkonstanten
float f1=2.456,f2=9.876; // zwei Gleitkommakonstanten
char *s="Sinnlosdatei"; // eine Zeichenkette
stream=fopen("sinnlos.txt","wt");
// Datei sinnlos.txt als Textdatei zum Schreiben oeffnen
fprintf(stream,"%s\n",s);
// Zeichenkette + Zeilenumbruch in Datei schreiben
fprintf(stream,"%4d %4d\n",a,b);
// beide Integerkonstanten + Zeilenumbruch in Datei schreiben
fprintf(stream,"%10.4f %10.4f\n",f1,f2);
// beide Floatkonstanten + Zeilenumbruch in Datei schreiben
fclose(stream); // Datei schlieszen
}
Das Programm erzeugte eine Datei mit dem Namen sinnlos.txt und dem Inhalt:
Sinnlosdatei
3 678
2.4560 9.8760
Im nun folgenden Beispiel wird die eben erzeugte Datei gelesen
und auf den Bildschirm geschrieben:
#include <stdio.h>
void main(void)
{
FILE *stream; // Dateivariable
int a,b;
float f1,f2;
char s[20];
stream=fopen("sinnlos.txt","rt");
// Datei sinnlos.txt als Textdatei zum Lesen oeffnen
fscanf(stream,"%20s",&s[0]); // Zeichenkette lesen
fscanf(stream,"%d %d",&a,&b); // Integers lesen
fscanf(stream,"%f %f",&f1,&f2); // Floats lesen
fclose(stream); // Datei schlieszen
// Darstellung auf dem Bildschirm:
printf("%s\n",s);
printf("%4d %4d\n",a,b);
printf("%10.4f %10.4f\n",f1,f2);
getch();
}
Der Vollständigkeit halber sei an dieser Stelle noch auf
die Funktionen
int fgetc(FILE *stream);
int fputc(int c,FILE *stream);
und
char *fgets(char *s,int size,FILE *stream);
char *fputs(char *s,FILE *stream);
verwiesen.
Autor: Ulrich Kritzner