Jeżeli masz jakiś problem, to pokombinuj chwilę, zerknij do poprzednich części kursu lub napisz do mnie.
A teraz część właściwa kursu...
Ta część będzie nieco obszerna, ale nauczysz się PODSTAWOWYCH operacji na plikach. Jednak, żeby to zrobić, musisz nauczyć się deklarować zmienne i stałe. Więc zaczynamy:
I Deklaracje
1. Deklarowanie zmiennych
Czym są zmienne? Zmienne to jakby pewne obszary w pamięci komputera przechowujące pewne informacje. Jak sama nazwa wskazuje, te informacje mogą się zmieniać. Aby można było w Delphi używać jakiejś zmiennej, trzeba ją najpierw zadeklarować. Zmienne deklaruje się za pomocą słowa VAR. Jest wiele typów zmiennych. Nie musisz ich wszystkich pamiętać (bo pamięta się te najczęściej używane), jednak powinieneś mieć te typy wraz z ich opisami gdzieś szybko dostępne.
A więc teraz podam opisy typów zmiennych w Delphi:
Rozróżniamy jakby 2 typy zmiennych. Zmienne lokalne i zmienne globalne. Zmienne lokalne są widoczne tylko w obrębie danej procedury lub funkcji np:
procedure fajnaProcedura;
var
zmiennaLokalna: integer;
begin
//
end;
|
W tym wypadku zmienna zmiennaLokalna będzie widoczna tylko w tej procedurze. Jeżeli np. mielibyśmy dwie procedury:
procedure fajnaProcedura;
var
zmiennaLokalna: integer;
begin
//
end;
procedure drugaProcka;
begin
zmiennaLokalna:=20;
end;
|
- wtedy pojawi się błąd: "Undeclared identifier: zmiennaLokalna".
Teraz słów kilka o zmiennych globalnych...
Zmienne globalne są widoczne w całym programie. Deklaruje się je poza wszystkimi procedurami np:
Zauważ, że taka deklaracja występuje zawsze, gdy w projekcie mamy jakąś formę. Tu właśnie deklaruje się zmienne globalne. Są one widoczne wszędzie w programie. Pewnie zastanawiasz się, co stanie się, gdy jakaś zmienna globalna ma taką samą nazwę, jak zmienna lokalna? Ano nic takiego ciekawego. :) Po prostu pierszeństwo ma zmienna globalna.
2. Deklarowanie stałych
Stała to jakiś obszar w pamięci komputera, który też przechowuje pewne informacje.
W stałych jako takich nie ma żadnych typów, ale przechowywana informacja nie może ulegać zmianie. Stałe również musimy zadeklarować przed ich użyciem. Deklarujemy je za pomocą słowa
CONST. Również dzielimy je na stałe lokalne i globalne. Zasada jest taka sama, jak przy zmiennych.
Kiedyś się zastanawiałem po co używać stałych... Może też to robisz w tym momencie... Więc stałe czasem naprawdę ułatwiają życie. Powiedzmy, że na formie masz jakiegoś labela i musisz zmieniać mu właściwość caption, gdy coś się stanie... Możesz to zrobić tak:
const info1 = 'To jest informacja pierwsza. Ona się teraz własnie powinna wyświetlić, więc to robi';
info2 = 'A teraz powinna się wyświetlić informacja druga i ona też się wyświetla';
|
I teraz powiedzmy, że w jakiejś procedurze musisz zmienić napis na labelu:
label1.Caption:=info1;
.
.
.
label1.Caption:=info2;
.
.
.
label1.Caption:=info1;
.
.
.
label1.Caption:=info2;
- itd...
|
A teraz zrób to bez stałych. :) Trochę się napiszesz :) A jeszcze powiedzmy, że będziesz chciał jakoś zmienić treść któregoś z tych napisów...
I gdyby nie stałe, musiałbyś znaleźć i pozmieniać treści wszystkich tych napisów. A dzięki zmiennym, wystarczy, że zmienisz tylko treść zmiennej - oczywiście mówię o zmienianiu w trakcie pisania programu.
To tyle, co do zmiennych i stałych.
II Pliki tekstowe
1. Operacje na plikach tekstowych bez użycia komponentów
Ten, kto wie, jak się operowało na plikach w Pascalu, będzie miał łatwiej. Więc główną myślą jest: "Najpierw trzeba skojarzyć plik ze specjaną zmienną (no nie zawsze, ale o tym potem), a potem można robić z nim, co się tylko chce".
Zmienna skojarzona z plikiem tekstowym musi być typem: TextFile, np.:
Mamy już zadeklarowaną zmienną. Teraz należy ją skojarzyć z plikiem, na którym chcemy przeprowadzać operacje:
|
assignFile(plik, 'C:\plik.txt');
|
Składnia assignFile:
|
(zmienna plikowa, plik na którym przeprowadzamy operacje)
|
Dobrze. Odczytajmy teraz pierwszą linijkę z pliku tekstowego:
procedure czytaj;
var
plik: textFile;
linia: string;
begin
assignFile(plik, 'C:\plik.txt');
reset(plik);
readln(plik, linia);
CloseFile(plik);
end;
|
Teraz objaśnienie:
reset(zmienna_plikowa) - otwiera plik do odczytu,
Readln(zmienna_plikowa, zmienna_do_ktorej_odczytujemy) - odczytuje linię / znak z pliku do zmiennej czyli, jeżeli np. mamy plik tekstowy o postaci:
To jest pierwsza linijka pliku tekstowego...
To jest druga linijka...
To jest trzecia....
|
- wtedy po wykonaniu powyższej procedury zmienna LINIA będzie zawierała tekst: To jest pierwsza linijka pliku tekstowego.
Jeszcze jedna ważna rzecz...
... różnica między read, a ReadLn
readln, po odczytaniu linijki jakby załamuje wiersz, czyli potem możemy odczytać kolejną linijkę, np.:
readln(plik, linia1);
readln(plik, linia2);
|
Natomiast read nie załamuje wiersza.
BARDZO WAŻNE JEST TO, ŻE PO WYKONANIU JAKIEJŚ OPERACJI NA PLIKU, NALEŻY GO ZAMKNĄĆ:
|
CloseFile(zmienna_plikowa);
|
Teraz zapis do pliku:
procedure zapis;
var
plik: TextFile;
begin
assignFile(plik, 'C:\plik.txt');
rewrite(plik);
writeln(plik, 'To jest jakaś linia w pliku o nazwie plik.txt');
CloseFile(plik);
end;
|
Tutaj instrukcja REWRITE otwiera plik do zapisu. Jeżeli coś jest już w tym pliku, to wtedy zostaje to usuwane i zapisywane zostają informacje podane przez write / writeln. Jeżeli plik nie istnieje, to wtedy zostaje on tworzony i zapisywane są w nim informacje.
Jeżeli natomiast chcemy coś dopisać do pliku na jego końcu wystarczy użyć instrukcji
APPEND zamiast REWRITE, np:
procedure zapis;
var
plik: TextFile;
begin
assignFile(plik, 'C:\plik.txt');
append(plik); writeln(plik, 'Ta linia została dopisana do pliku');
CloseFile(plik);
end;
|
2. Operacje na plikach tekstowych z użyciem komponentów
Komponenty zawsze ułatwiają życie. Również w pracy z plikami.
- Połóż na formę komponent MEMO z karty STANDART i komponent Button
- Zmień właściwość NAME komponentu memo na: MEMO
- W zdarzeniu onClick Buttona wpisz taki kod:
|
memo.Lines.SaveToFile('C:plik.txt');
|
Teraz wpisz coś do komponentu memo (to jest komponent, do którego możemy wpisywać jakieś teksty. Może posłużyć w napisaniu np. prostego edytora tekstu).
Wciśnij teraz buttona i okaże się, że zawartość memo została zapisana do pliku
C:\plik.txt. To właśnie dzięki metodzie SaveToFile.
Dzięki metodzie LoadFromFile możemy odczytać zawartość jakiegoś pliku i umieścić ją w memo(robi się to wszystko automatycznie).
To narazie tyle, jeżeli chodzi o pliki tekstowe. W następnej części pokaże jak posługiwać się innymi przydatnymi komponentami związanymi z plikami, a nawet może uda nam się napisać pierwszy większy projekt - prosty edytor tekstowy. :)
Jeżeli ktoś ma jakieś pytania, niech pisze...