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. BefehleL = long Register, D = double Register, BV = byte Variable, SV = string Variable Öffnen/Schliessenfopen 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/schreibenfread_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 Sonstigefsetpos 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 umbenennenHier 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 FFDie 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 |