Pliki0MSoffice, Programowanie, Pascal


Przetwarzanie plików w języku Pascal

 

1. Deklaracja zmiennej plikowej - określenie typu elementów pliku.

Wymiana informacji z urządzeniami zewnętrznymi odbywa się za pośrednictwem plików, dostęp do nich uzyskuje się za pomocą zmiennej plikowej. Zmienną plikową należy najpierw zadeklarować, aby poinformować kompilator, do jakiego typu pliku dane będą wprowadzane.

W TP wyróżniamy 3 klasy plików:

-          zdefiniowane: var zmienna_plikowa: file of typ_elementów;

-          tekstowe: var zminna_plikowa: test;

-          niezdefiniowane: var zminna_plikowa: file;

 

2. Skojarzenie zmiennej plikowej.

Zmienną plikową należy skojarzyć z urządzeniem zewnętrznym za pomocą procedury
Assign(zmienna_plikowa, nazwa_pliku)
zmienna_plikowa określa typ elementów pliku, nazwa_pliku jest nazwą pliku dyskowego, który zostanie utworzony lub który już istnieje.

 

3. Otwarcie pliku.

Kolejną czynnością jest otwarcie pliku jedną z procedur: Reset, Rewrite lub Append. Z plikiem związana jest tak zwana pozycja pliku (wskaźnik), od którego zależy miejsce (nr linii lub danej) z którego aktualnie czytamy, lub w którym zapisujemy.

W celu utworzenia nowego pliku stosujemy procedurę
Rewrite(zmienna_plikowa)- kasuje zapisany plik.

Do otwarcia pliku już istniejącego służy procedura
Reset(zmienna_plikowa)- dla plików text tylko do odczytu, dla plików innego typu do odczytu i do modyfikacji danych. Wskaźnik pliku ustawia się na pierwszym elemencie.

Do modyfikacji wyłącznie plików tekstowych stosuj się procedurę
Append(zmienna_plikowa)- ustawia wskaźnik pliku na końcu pliku, dzięki czemu możliwe jest dopisanie tekstu (linii) na końcu pliku.

Uwaga! Modyfikacja plików tekstowych może polegać tylko na dopisaniu tekstu na końcu pliku po otwarciu procedurą Append. Dla plików nietekstowych możliwe jest dopisanie elementów na końcu pliku, a także modyfikacja dowolnego elementu w środku pliku, polegająca na zamianie elementów już istniejących na inne, a nie na zwiększaniu ich liczby.

 

4. Przetwarzane plików - odczyt i zapis do plików.

Read(zmienna_plikowa, lista_zmiennych_wejściowych);- tylko dla plików tekstowych

Write(zmienna_plikowa, lista_argumentów_wyjściowych);

Writeln(zmienna_plikowa, lista_argumentów_wyjściowych);  - tylko dla plików tekstowych

Zamkniecie pliku. Po zakończeniu przetwarzania pliku przez program plik powinien być zamknięty za pomocą procedury
Close(zmienna_plikowa)

 

Przetwarzanie plików tekstowych - funkcje Eof, Eoln, SeekEof, SeekEoln:

Eof(zmienna_plikowa) - wartością funkcji jest True, jeśli wskaźnik pliku znajduje się w pozycji przed ostatnim znakiem pliku (Ctr-Z) lub gdy plik jest pusty.

SeekEof(zmienna_plikowa) - działa jak funkcja Eof, ale ignoruje najbliższe spacje, znaki tabulacji oraz znaki CR i LF.

Eoln(zmienna_plikowa) - wartością funkcji jest True, gdy wskaźnik pliku znajduje się w pozycji znaku końca linii(CR) lub końca pliku.

SeekEoln(zmienna_plikowa) - działa jak Eoln ale ignoruje najbliższe spacje i znaki tabulacji, co ułatwia odczytywanie wartości numerycznych ze zbiorów tekstowych.

 

Do przetwarzania plików zdefiniowanych (nietekstowych) można stosować następujące funkcje i procedury standardowe:

Eof(zmienna_plikowa) - działa jak w przypadku plików tekstowych.

Seek(zmienna_plikowa, pozcja) - powoduje zmianę położenia wskaźnika pliku na element o numerze pozycja (licząc od zera).

FileSize(zmienna_plikowa) - Wartością funkcji jest ilość elementów pliku.

FilePos(zmienna_plikowa) - wartością funkcji jest aktualna pozycja wskaźnika pliku.

Truncate(zmienna_plikowa) - procedura powoduje usunięcie wszystkich elementów z pliku począwszy od aktualnego położenia wskaźnika pliku do jego końca.

 

5. Zamknięcie pliku.

Po zakończeniu przetwarzania pliku przez program plik powinien być zamknięty za pomocą procedury Close(zmienna_plikowa). Spowoduje to odłączenie zmiennej plikowej od nazwy pliku. Brak wywołania tej procedury spowoduje, że powstały plik będzie miał wielkość 0.

 

Zadanie 1

Przykład utworzenia pliku tekstowego.

 

program plik_txt;

var f:text;

begin

  Assign(f,'c:/Nowy.txt');

  Rewrite(f);

  Writeln(f,'Wstep do Informatyki');

  Writeln(f,'Prztwarzanie plikow');

  Close(f);

end.

polecenie 1

W dowolnym edytorze otwórz utworzony plik Nowy i zmodyfikuj jego zawartość.

Następnie usuń procedurę Close i sprawdź jaki ma to wpływ na działanie programu.

Zadanie 2

Program odczytuje zawartość pliku tekstowego i wyświetla jego zawartości na ekranie.

 

program tekst02;

var f:text;

ch:char;

begin

  Assign(f,'c:/Nowy');

  Reset(f);

  while not Eof(f) do

  begin

    Read(f,ch);

    Write(ch);

  end;

Readln;

end.

polecenie 1

Sprawdź jaki uzyskamy efekt gdy zastąpimy funkcję Eof kolejno funkcją: SeekEof, Eoln, SeekEoln.

Zadanie 3

Program zapisuje tekst z klawiatury do pliku dyskowego tekstowego.

 

program zapis_txt;

var f:text;

linia:string;

wyj:boolean;

begin

  Assign(f,'C:/Ala.txt');

  Rewrite(f);

  Wyj:=True;

  while wyj do

  begin

    Readln(linia);

    if linia[1]='#' then wyj:=false

    else writeln(f,linia);

  end;

  Close(f);

end.

polecenie 1

Zmodyfikuj program tak, aby znakiem kończącym był znak $.

Zadanie 4

Program realizuje kopiowanie plików tekstowych.

 

program kopiuj_tekst;

var f1,f2:text;

linia: string;

begin

  Assign(f1,'c:/Ala.txt');

  Assign(f2,'c:/Ola.txt');

  {otwarcie pliku Ala.txt tylko do odczytu}

  Reset(f1);

  {tworzenie nowego pliku Ola.txt}            

  Rewrite(f2);         

  while not Eof(f1) do

  begin

    readln(f1,linia);

    Writeln(f2,linia);

  end;

  close(f1);

  close(f2);

end.

 

polecenie 1

W dowolnym edytorze sprawdź efekt działania programu.

Zadanie 5

Program odczytuje piąty element danego pliku typu Integer i dopisuje go na końcu tego pliku.

 

program plik_int;

var f:file of integer;

i,dana:integer;

begin

  {tworzenie pliku plikint}

  Assign(f,'c:/plikint');

  Rewrite(f);

  {wpisanie do pliku kolejnych 20 liczb}               

  for i:=1 to 20 do write(f,i);      

  {przesunięcie wskaźnika pliku do 5 elementu}

  Seek(f,4);               

  Read(f,dana);

  {ustawienie wskaźnika za ostatnim elementem pliku}             

  Seek(f,Filesize(f)); 

  write(f,dana);

  {ustawienie wskaźnika na początek pliku}

  Reset(f);

  {odczyt pliku}

  for i:=1 to Filesize(f) do

  begin

    read(f,dana);

    write(dana:3);

  end;

  close(f);

  readln

end.

polecenie 1

Zmodyfikuj program tak, aby dopisywał na końcu pliku wszystkie elementy w odwrotnej kolejności.



Wyszukiwarka