Aktualności Forum Graffiti Publicystyka Teleport
  • Kurs języka E - część 5

20.02.2005 13:36, autor artykułu: Wojciech Zatorski (Amiga Computer Studio)
odsłon: 2147, powiększ obrazki, wersja do wydruku,

Zabawa z plikami i katalogami

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"

ReadStr(in,bufor) odczyta tylko pierwszą linie.
Read(in,bufor,30) odczyta obie linie.

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

 głosów: 1   
dodaj komentarz
Na stronie SCENA.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem