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) edytuj
Odczytuje 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) edytuj
Podobnie 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) edytuj
Jak 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) edytuj
Kopiuje do pliku maksymalnie n bajtów z pamięci wskazywanej przez b. Wywołuje fwrite(b,1,n,BASFILE);
BSave(F,b,n) edytuj
Podobnie 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) edytuj
Jak BSave, ale dane zostają skompresowane.
Close edytuj
Zamyka plik przypisany do BASFILE, aktualizuje wprowadzone w nim zmiany. Wywołuje fclose(BASFILE);
Eof edytuj
Sprawdza, 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) edytuj
Odczytuje 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 edytuj
Zapisuje do pliku wprowadzane na nim zmiany zapamiętane w buforze. Wywołuje fflush(BASFILE);
FPrint(T) edytuj
Zapisuje w pliku liczbę T w postaci tekstowej. Wywołuje fprintf(BASFILE,"%.12lg",(double)T);
FPrint$(T) edytuj
Zapisuje w pliku tekst T. Wywołuje fputs(T,BASFILE);
Inp edytuj
Zwraca 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) edytuj
Usuwa plik o nazwie P. Wywołuje remove(P);
Loc edytuj
Zwraca pozycję "kursora" pliku. Wywołuje ftell(BASFILE)
Lof edytuj
Podaje 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) edytuj
Otwiera 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) edytuj
Zapisuje znak (bajt) c do pliku. Wywołuje fputc(c,BASFILE);
RelSeek(D) edytuj
Przesuwa "kursor" pliku o D pozycji. Wywołuje fseek(BASFILE,D,SEEK_CUR);
Rename(S,D) edytuj
Zmienia nazwę pliku lub katalogu S na D, lub przenosi plik. Wywołuje rename(S,D);
Seek(D) edytuj
Przesuwa "kursor" pliku na pozycję D. Wywołuje fseek(BASFILE,D,SEEK_SET);
SeekEnd(D) edytuj
Przesuwa "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ść.