Dateien |
Bevor man mit Dateien arbeiten kann, muss man sie zuerst öffnen:
fopen L0, "file", "r";
Register "L0" enthält die Dateinummer, der Name ist "file", und der Modus ist read (lesen) "r". Andere sind: "a" append (anfügen) und "w" write (schreiben). Datei schliessen:
fclose L0;
Von einer Datei lesen:
fread_s L0, string;
Wie du vielleicht schon gemerkt hast, "string" ist eine Stringvariable und "L0" ist die Dateinummer. Befehle
L = long Register, D = double Register, BV = byte Variable, SV = string Variable
Öffnen/Schliessen
fopen L (Dateinummer), SV (Name), SV (Typ); Datei öffnen
types are: "r" read (lesen)
"w" write (schreiben)
"a" append (anfügen)
"rw" read/write (lesen/schreiben)
"wr" write/read (schreiben/lesen)
"ar" append/read (anfügen/lesen)
fclose L (Dateinummer); Datei schliessen
lesen/schreiben
fread_b L (Dateinummer), L; lese byte
fread_ab L (Dateinummer), BV, L (Länge); lese byte array
fread_i L (Dateinummer), L; lese int
fread_l L (Dateinummer), L; lese lint
fread_d L (Dateinummer), D; lese double
fread_s L (Dateinummer), SV, L (Länge); lese string
fread_ls L (Dateinummer), SV; lese line
fwrite_b L (Dateinummer), L; schreibe byte
fwrite_ab L (Dateinummer), BV, L (Länge); schreibe byte array
fwrite_i L (Dateinummer), L; schreibe int
fwrite_l L (Dateinummer), L; schreibe lint
fwrite_d L (Dateinummer), D; schreibe double
fwrite_s L (Dateinummer), SV; schreibe string
fwrite_sl L (Dateinummer), L; schreibe lint als String
fwrite_sd L (Dateinummer), D; schreibe double als String
fwrite_n L (Dateinummer), L; schreibe "L" neue Zeilen
fwrite_sp L (Dateinummer), L; schreibe "L" Leerzeichen
Sonstige
fsetpos L (Dateinummer), L; setze Dateiposition
fgetpos L (Dateinummer), L; gibt Dateiposition zurück
frewind L (Dateinummer); Datei auf Anfang setzen
fsize L (Dateinummer), L; gibt die Dateigrösse zurück
fremove L (Dateinummer), SV (Name); Datei löschen
frename L (Dateinummer), SV (alt), SV (neu); Datei umbenennen
Hier ist ein Beispiel:
txtsave.na
1| string file[256];
2| string line[256];
3|
4| print_s "file to save text? ";
5| input_s file;
6|
7| push_i 0, L0;
8| fopen L0, file, "w";
9|
10| push_i 1, L1;
11| print_s "Enter the text. Empty line to exit...";
12| print_n L1;
13|
14| lab input;
15| print_s ": ";
16| input_s line;
17| fwrite_s L0, line;
18| fwrite_n L0, L1;
19| neq_s line, "", L2;
20| jmp_l L2, input;
21|
22| fclose L0;
23| push_i 0, L0;
24| exit L0;
line feed (neue Zeile)Der "line feed" markiert das Zeilenende in einer Textdatei.Die zwei Zeichen, um das zu markieren sind:
CR (carriage return, ASCII code: 13)
LF (line feed, ASCII code: 10)
Die Bezeichnungen "carriage return" und "line feed" sind aus der guten alten Schreibmaschinen Zeit. Jedes Betriebssystem verwendet einen ander Code:
DOS, Windows: CRLF
Mac OS: CR
Amiga OS, Unix, Linux: LF
?: LFCR (Ja! Sogar dieser seltsame soll im Umlauf sein!)
Wenn wir eine Zeile mit "fread_ls" lesen, kümmert sich Nano um alle Codes. Es kommt mit allen line feeds zurecht. Einen line feed mit "fwrite_n" schreiben ist anders. Wir müssen einen Code wählen. Das kann man mit einem Programmteil wie diesem:
string cr[2];
string lf[2];
push_i 13, L0;
char L0, cr;
push_i 10, L0;
char L0, lf;
move_s cr, _fnewline;
add_s _fnewline, lf, _fnewline;
Das setzt "_fnewline" auf CRLF. Der "fwrite_n" Befehl verwendet jetzt CRLF. Es gibt eine Standardeinstellung für "_fnewline". Es ist der Code des Betriebssystems. Bei einem Windows Rechner ist "_fnewline" auf CRLF gesetzt, etc. BinärdateienEs gibt zwei Arten Binärzahlen in einer Datei zu speichern:- little endian - big endian Wenn wir die long Zahl "76543" in eine Datei speichern, bekommen wir diesen HEX Code:
little endian: FF 2A 01 00
big endian: 00 01 2A FF
Die long Zahl ist vier Bytes lang. Jedes Nummernpaar ist ein Byte Der Unterschied ist: "little endian" ist andersrum als "big endian". Wir müssen den Endian Typ einer Datei kennen, um Zahlen lesen und schreiben zu können. Sonst würden wir falsche Zahlen lesen und schreiben. Der Endian Typ wird mit der Variablen "_fendian" gesetzt. Ein Beispiel:
#include <file.nah>
#setreg_l L0, null;
#setreg_l L1, file;
#setreg_l L2, n;
#setreg_l L3, endian;
push_i 0, null;
push_i 0, file;
push_l 76543L, n;
push_i ENDIAN_BIG, endian;
pull_i endian, _fendian;
fopen file, "big_endian", "w";
fwrite_l file, n;
fclose file;
exit null;
Prev: Interne Variablen | Next: Dateien Fehlercodes
|