GLBasic Benutzerhandbuch

Main sections

OPENFILE()

ok% = OPENFILE(channel%, file$, mode%)



Öffnet die Datei file$ zum schreiben (mode%=FALSE oder 0) oder lesen (mode%=TRUE oder 1) und weist den Kanal channel% zu. Der Rückgabewert ist TRUE oder FALSE, je nach dem, ob die Datei geöffnet werden konnte.

mode%:
-1 - anhängen an bestehende Datei
0 - schreiben
1 - lesen


<B>Lesen von Dateien</B>


READBYTE channel%, val%%
READUBYTE channel%, val%%
READWORD channel%, val%%
READUWORD channel%, val%%
READLONG channel%, val%%
READULONG channel%, val%%
READIEEE channel%, val##
READSHORTIEEE channel%, val##
READSTR channel%, val$#, nc%
READLINE channel%, val$#



<B>Schreiben von Dateien</B>


WRITEBYTE channel%, val%
WRITEWORD channel%, val%
WRITELONG channel%, val%
WRITEUBYTE channel%, val%
WRITEUWORD channel%, val%
WRITEULONG channel%, val%
WRITEIEEE channel%, val#
WRITESHORTIEEE channel%, val#
WRITESTR channel%, val$
WRITELINE channel%, val$



BYTE = 1 Byte, (0..255)
WORD = 2 Byte, (0..65535)
U = Ohne Vorzeichen(z.B. 0..255 statt -127..128 für BYTE)
LONG = 4 Byte, (0..4294967295)
IEEE = 8 Byte, IEEE 64 Bit Gleitkommezahl
SHORTIEEE = 4 Byte, IEEE 32 Bit Gleitkommazahl

Ganzzahlen werden ohne Vorzeichen geladen. Ein Wert -127 wird bei BYTE dann 255.
Mit IEEE kann man Gelitkommazahlen speichern. Damit kann man die GLBasic Zahlen am besten speichern.

Der Wert nc% bei READSTR gibt an, wieviele Zeichen (BYTE) gelesen werden sollen.

Bei READLINE wird bis zum "\n" gelesen, und ein mögliches "\r" wieder getrimmt. Somit ist es möglich auch UNIX Dateien zu lesen. Beim Schreiben mit WRITELINE wird immer ein "\r\n" angehängt. Bei WRITESTR wird der String roh ausgegeben.
Möchte man UNIX Dateien schreiben, verwendet man:
WRITESTR 1, text$ + "\n"


ok% = ENDOFFILE(channel%)


Gibt an, ob keine weiteren Daten mehr zum Lesen bereitstehen.

CLOSEFILE channel%


Schießt eine Datei wieder. Dateien müssen geschlossen werden, damit sie von anderen Anwendungen oder GLBasic wieder gelesen werden können.

pos# = FILEPOSITION(channel#)


Gibt die aktuelle Leseposition innerhalb einer Datei in Bytes vom Anfang an.

FILESEEK channel%, bytes%, direction%


Verschiebt die Leseposition in einer Datei um bytes% Bytes.
direction%:
-1 : bytes% ist vom Dateiende aus.
0 : bytes% ist vom Dateianfang aus.
1 : bytes% ist von der aktuellen Leseposition aus.



// Files
test$ = "test.bin"
OPENFILE(1, test$, FALSE)

WRITEBYTE 1, 42
WRITEBYTE 1, -42
WRITEWORD 1, 16767
WRITEWORD 1, -16767
WRITEIEEE 1, 1.234E-4

xx$= "Hello World\nYes, Hello\n"
WRITESTR 1, xx$
WRITELONG 1, 16767
WRITELONG 1, -16767
CLOSEFILE 1

LOCAL b1%, b2%, w1%, w2%, l1%, l2%, ieee#
LOCAL x2$, _x1$, _x2$
OPENFILE(1, test$, TRUE)
READBYTE 1, b1%
READBYTE 1, b2%
READWORD 1, w1%
READWORD 1, w2%
READIEEE 1, ieee#

// READSTR 1, x2$, LEN(xx$)
READLINE 1, _x1$
READLINE 1, _x2$
READLONG 1, l1%
READLONG 1, l2%
CLOSEFILE 1

LOCAL i%
PRINT "b1="+b1%, 0,i; INC(i, 10);
PRINT "b2="+b2%, 0,i; INC(i, 10);
PRINT "w1="+w1%, 0,i; INC(i, 10);
PRINT "w2="+w2%, 0,i; INC(i, 10);
PRINT "ie="+ieee#, 0,i; INC(i, 10);
PRINT "st="+_x1% + "-" + _x2%, 0,i%; INC(i%, 10);
PRINT "l1="+l1%, 0,i%; INC(i%, 10);
PRINT "l2="+l2%, 0,i%; INC(i%, 10);

SHOWSCREEN
MOUSEWAIT




OPENFILE(1, "test.txt", FALSE)
WRITELONG 1, 1234
WRITELONG 1, 5678
WRITELONG 1, 9911
CLOSEFILE 1

LOCAL i

// 1234
OPENFILE(1, "test.txt", TRUE)
DEBUG "pos(0)="+FILEPOSITION(1)+"\n"
READLONG 1,i%; DEBUG "read="+i+"\n"

// 1234
FILESEEK(1, 0, 0)
DEBUG "pos(0)="+FILEPOSITION(1)+"\n"
READLONG 1,i%; DEBUG "read="+i+"\n"

// 1234
FILESEEK(1, -4, 1)
DEBUG "pos(0)="+FILEPOSITION(1)+"\n"
READLONG 1,i%; DEBUG "read="+i+"\n"

// 1234
FILESEEK(1, -12, -1)
DEBUG "pos(0)="+FILEPOSITION(1)+"\n"
READLONG 1,i%; DEBUG "read="+i+"\n"

// 9911
FILESEEK(1, 4, 1)
DEBUG "pos(0)="+FILEPOSITION(1)+"\n"
READLONG 1,i%; DEBUG "read="+i+"\n"

CLOSEFILE 1

See also...