BasicC/Czytanie i pisanie do plików
Z założenia BasicC obsługuje jednocześnie tylko jeden otwarty plik przypisany do zmiennej BASFILE typu FILE* zadeklarowanej w Basic.h. Ograniczenie to można obejść stosując komendy C lub kopiując wskaźniki innych plików do zmiennej BASFILE i odwrotnie. Większość operacji wymaga wcześniejszego otwarcia pliku komendą Open, po zakończeniu operacji należy zamknąć plik komendą Close. Odczyt następuje od aktualnej pozycji "kursora" pliku. Operacje na pliku domyślnie odbywają się za pośrednictwem bufora. Wymagana jest biblioteka stdio.h domyślnie załączana w Basic.h
BGet(b,n)
edytujOdczytuje maksymalnie n bajtów z otwartego pliku i zapisuje w pamięci wskazywanej przez n - może to być np. zmienna łańcuchowa. W miejsce n można podać Lof, jeśli chcemy odczytać wszystkie bajty pliku. Uwaga na możliwość przekroczenia zakresu pamięci ! Wywołuje fread(b,1,n,BASFILE);
BLoad(F,b,n)
edytujPodobnie jak Bget, tylko najpierw otwiera plik o nazwie F do odczytu, a na końcu go zamyka. Wykonuje {BASFILE=fopen(F,"rb");fread(b,1,n,BASFILE);fclose(BASFILE);}
BLoadPak(F,B)
edytujJak BLoad, ale odczytuje cały plik skompresowany komendą BSavePak. Uwaga - trzeba znać wielkość danych po dekompresji i przygotować odpowiednio duży bufor B.
BPut(b,n)
edytujKopiuje do pliku maksymalnie n bajtów z pamięci wskazywanej przez b. Wywołuje fwrite(b,1,n,BASFILE);
BSave(F,b,n)
edytujPodobnie jak Bput, tylko najpierw otwiera plik o nazwie F do zapisu, a na końcu go zamyka. Wykonuje {BASFILE=fopen(F,"wb");fwrite(b,1,n,BASFILE);fclose(BASFILE);}
BSavePak(F,B,n)
edytujJak BSave, ale dane zostają skompresowane.
Close
edytujZamyka plik przypisany do BASFILE, aktualizuje wprowadzone w nim zmiany. Wywołuje fclose(BASFILE);
Eof
edytujSprawdza, czy ustawiony jest znacznik osiągnięcia końca pliku, zwraca wartość różną od 0 jeśli tak. Znacznik jest ustawiany np. po próbie odczytu gdy "kursor" osiągnął koniec pliku. Nie mylić z EOF, która jest ujemną stałą zwracaną przez niektóre operacje, gdy osiągnięty został koniec pliku. Wywołuje feof(BASFILE)
FInput$(S)
edytujOdczytuje linię tekstu z pliku i kopiuje do zmiennej łańcuchowej S wraz ze znakiem końca linii, jeśli występuje. Nie więcej niż STRLEN-1 znaków. Wywołuje fgets(S,STRLEN,BASFILE);
Flush
edytujZapisuje do pliku wprowadzane na nim zmiany zapamiętane w buforze. Wywołuje fflush(BASFILE);
FPrint(T)
edytujZapisuje w pliku liczbę T w postaci tekstowej. Wywołuje fprintf(BASFILE,"%.12lg",(double)T);
FPrint$(T)
edytujZapisuje w pliku tekst T. Wywołuje fputs(T,BASFILE);
Inp
edytujZwraca odczytany z pliku znak (bajt) (lub EOF, gdy osiągnięty jest koniec pliku lub wystąpi błąd). Wywołuje fgetc(BASFILE)
Kill(P)
edytujUsuwa plik o nazwie P. Wywołuje remove(P);
Loc
edytujZwraca pozycję "kursora" pliku. Wywołuje ftell(BASFILE)
Lof
edytujPodaje długość pliku. Może to nie być prawidłowa liczba w bajtach, jeśli plik został otwarty jako tekstowy. Wywołuje funkcję SIZEFILE(BASFILE) zdefiniowaną w Basic.h, która może być używana też dla innych niż BASFILE plików.
Open(P,M)
edytujOtwiera plik o nazwie P w trybie M i przypisuje do strumienia wskazywanego przez BASFILE, w przypadku niepowodzenia BASFILE wskazuje na NULL. Wywołuje BASFILE=fopen(P,"M");
r | Do odczytu. Plik musi istnieć. |
w | Do zapisu. Tworzy pusty plik, jeśli plik już istnieje - jego zawartość jest kasowana. |
a | Dopisywanie. Operacje wyjściowe zapisują dane na końcu pliku bez względu na komendy zmiany położenia kursora. Plik jest tworzony, jeśli nie istnieje. |
Dopisanie b
oznacza tryb binarny pliku zamiast domyślnego tekstowego. Dopisanie +
oznacza, że możliwy jest zapis i odczyt. Więcej informacji w dokumentacji C.
Out(c)
edytujZapisuje znak (bajt) c do pliku. Wywołuje fputc(c,BASFILE);
RelSeek(D)
edytujPrzesuwa "kursor" pliku o D pozycji. Wywołuje fseek(BASFILE,D,SEEK_CUR);
Rename(S,D)
edytujZmienia nazwę pliku lub katalogu S na D, lub przenosi plik. Wywołuje rename(S,D);
Seek(D)
edytujPrzesuwa "kursor" pliku na pozycję D. Wywołuje fseek(BASFILE,D,SEEK_SET);
SeekEnd(D)
edytujPrzesuwa "kursor" na D pozycję od końca pliku. fseek(BASFILE,D,SEEK_END);
Przykład:
#include "Basic.h"
MAIN
FILE* plik;
Input$(imie,STRING$)
Input(wiek,VALUE)
BSave("test.txt",STRING$,Len(STRING$))
BLoad("test.txt",STRING$,Lof)
Print$ STRING$ NL
Open("test.txt",a+)
FPrint$(" wiek")
Seek(0)
FInput$(STRING$)
Print$ STRING$ NL
plik=BASFILE;
Open("test.2",w+)
Out(0)
FPrint(VALUE)
Seek(0)
Print Inp NL
FInput$(STRING$)
Print$ STRING$ NL
Close // zamkniecie pliku "test.2"
BASFILE=plik;
Close // zamkniecie pliku "test.txt"
ENDMAIN
Uwaga - powyższy przykład używa zmiennych pomocniczych BasicC STRING$ i VALUE, jest to niezalecane, bo niektóre komendy zmieniają ich wartość.