Kiedy napiszecie własny programik zapewne chcielibyście zapisać wynik jego
działania do pliku. Nic trudnego...
Działanie na plikach można wytłumaczyć na przykładzie książki. Aby
dowiedzieć się co znajduje się w książce musisz najpierw ją otworzyć
(Open()), a następnie przeczytać dany tekst (Read()), możesz również
przeskakiwać strony (Seek()), a nie raz przydałoby się uzupełnić książkę
(własną, nie z biblioteki! - Write()). Jak skończysz "zabawę" z ksiązką to
należałoby ją zamknąć (Close()). Nieraz przydaje się ułożenie książek na
innych półkach lub regałach (CreateDir()), bo po co wszystko ma być na jednej
półce, bedzię pózniej łatwiej i szybciej znaleźć interesującą pozycje.
Nieraz książka może stać się bezwartościowa (np. zmieni się ustrój) to
należałoby ją wyrzucić do kosza (DeleteFile()) albo zmienić jej tytuł
(Rename()). W AmigaE rozkazem otwierającym (nowy/stary) plik jest:
wskaznik_do_pliku:=Open(nazwa_pliku,tryb)
W polu nazwa_plik wpisujemy pełną scieżkę dostępu do naszego pliku, który
zamierzamy stworzyć lub który jest już stworzony.
W miejscu tryb wpisujemy NEWFILE jeśli chcemy stworzyć
nowy plik lub OLDFILE jeśli plik już istnieje i jedynie chcemy odczytać dane
znajdujące się w tym pliku lub dograć dane np. na końcu pliku.
Stałe NEWFILE oraz OLDFILE są wbudowane w kompilator, tak
więc nie musimy korzystać z dodatkowych modułów (.m).
Kolejnym krokiem jeśli chcemy zapisać dane do pliku jest wydanie komendy:
Write(wskaznik_do_pliku,bufor,dlugosc_bufora)
wskaznik_do_pliku jest to wartość jaką zwraca funkcja Open(), bufor jest to
wskażnik do bufora, a dlugosc_bufora jest to po prostu długość bufora jaka ma
zostać zapisana.
Jeśli już zapiszemy wszystkie dane to należałoby zamknąć plik, do tego służy
polecenie:
Close(wskaznik_do_pliku)
Oto przykładowe użycie funkcji zapisz:
PROC main() DEF out IF out:=Open('ram:test.txt',NEWFILE) Write(out,'FAJNY PLICZEK',STRLEN) Close(out) ELSE WriteF('Błąd!n') ENDIF ENDPROC
Działanie tego małego programiku polega na otwarciu nowego pliku "test.txt",
a następnie zapisanie do niego tekstu "FAJNY PLICZEK", jako długość bufora
została podana stała STRLEN, która również jest wbudowana w E, jej działanie
polega na tym, że zwraca długość ostatnio używanego ciągu tekstowego
(string). Po zapisaniu tekstu do pliku następuje zamknięcie pliku. Do
programu została również dodana obsługa błędu, więc jeśli komenda Open()
zwróci błąd to w okienku AmigaShell powinien wyświetlić się komunikat o
treści: "Błąd!".
Jeśli teraz chcemy odczytać zawartość tego pliku, to powinniśmy skorzystać z
komendy
Read(wskaznik_do_pliku,bufor,dlugosc_bufora)
lub z
ReadStr(wskaznik_do_pliku,bufor)
Polecenie ReadStr() odczytuje całą linie do napotkania końca wiersza (czyli
entera) np.
1. "Fajny jest tekst" 2. "bo jest fajny"
Możliwe jest również zapisywanie lub odczytywanie od dane pozycji. Do tego
typu zadań służy komenda:
Seek(wskaznik_do_pliku,pozycja,tryb)
trybem może być:
OFFSET_BEGINNING - pozycja odnosi się do początku pliku
OFFSET_CURRENT - pozycja odnosi się do obecnej pozycji w pliku
OFFSET_END - pozycja odnosi się od końca pliku
Czyli jeśli chcemy skoczyć o 20 bajtów od początku pliku to piszemy:
Seek(wskaznik_do_pliku,20,OFFSET_BEGINNING)
a jeśli chcemy skoczyć na koniec pliku to:
Seek(wskaznik_do_pliku,0,OFFSET_END)
Możemy również kasować pliki i katalogi (jeśli katalog w środku jest pusty!)
używając polecenia:
DeleteFile(nazwa_pliku_lub_katalogu)
Przykładowo jeśli chcemy skasować plik utworzony przez program files wystarczy wpisać:
DeleteFile('ram:acs.txt')
Nieraz przychodzi ta chwila, że chcemy aby nasz program miał możliwość
tworzenia katalogów (np. na "przerobione" dane), do tego służy
komenda:
CreateDir(nazwa_katalogu)
np.
CreateDir('alejaja') CreateDir('ram:libs')
A może chcielibyście wiedzieć z jakiego katalogu uruchamiany jest wasz
program? Nic trudnego, komenda
GetCurrentDirName(bufor,dlugosc_bufora)
powoduje "zapełnienie" bufora aktualną ścieżką.
Ciekawość ludzka nie zna granic więc czemu nie sprawdzić czy użytkownik nie
zmienił nazwy naszego ukochanego programu:
GetProgramName(bufor,dlugosc_bufora)
Jeśli więc użytkownik zmienił nazwe naszego najbardziej ukochanego programu
więc czemu nie przywrócić mu poprzedniej nazwy (tak na złość
użytkownikowi:
Rename(stara_nazwa,nowa_nazwa)
Dzięki temu np. jeśli plik aktualnie nazywa się "facet", a chcemy aby się
nazywał "kobitka" wpisujemy polecenie:
Rename('facet','kobitka')
Niezapominajmy, że przeważnie należy podać pełną ścieżkę dostępu i to nie tyczy się tylko tej komendy, ale wszystkich opisanych w tym odcinku!
Dzięki poznanym w tym odcinku poleceniom będziecie mogli w bardzo prosty sposób tworzyć własne bazy danych lub inne programy muszące korzystać z operacji wejścia/wyjścia. Zachęcam do stworzenia programiku pozwalającego np. na przerobienie pliku .guide na .html
Dziś poznaliśmy |
Open(nazwa_pliku,tryb) - otwórz nowy/stary plik Write(wskaznik_do_pliku,bufor,dlugosc_bufora) - zapisz do pliku Read(wskaznik_do_pliku,bufor,dlugosc_bufora) - odczytaj z pliku ReadStr(wskaznik_do_pliku,bufor) - odczytaj pełną linię do napotkania entera Close(wskaznik_do_pliku) - zamknij plik Seek(wskaznik_do_pliku,pozycja,tryb) - skocz w miejsce ... Rename(stara_nazwa,nowa_nazwa) - zmień nazwę plikowi DeleteFile(nazwa_pliku_lub_katalogu) - skasuj plik/katalog CreateDir(nazwa_katalogu) - stwórz katalog GetCurrentDirName(bufor,dlugosc_bufora) - weź aktualną nazwę katalogu GetProgramName(bufor,dlugosc_bufora) - weź nazwę pod jaką program został uruchomiony |