Pliki. Ze względu na typ zawartych w nich danych rozróżnia się trzy podstawowe rodzaje plików:

Podobne dokumenty
Pliki. Operacje na plikach w Pascalu

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Wykład PASCAL - Pliki tekstowe

Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych

Wstęp do programowania. Pliki. Piotr Chrząstowski-Wachtel

Wszystkie zmienne typu plikowego, z wyjątkiem Output i Input muszą być zadeklarowane w sekcji deklaracji programu, który z nich korzysta.

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

PLIKI TEKSTOWE F C E 30 0D 0A 42 6F 72 6C 61 6E 64 1A T U R B O _ P A S C A L _ 7. 0

Język programowania PASCAL

Wprowadzenie komentarzy do programu

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

PLIKI. Składnia deklaracji zmiennej plikowej: file of <typ>

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Instrukcja standardowa Writeln

Informatyka 1. Przetwarzanie tekstów

Kompendium wiedzy z Pascala

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podprogramy. Procedury

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Programowanie w Turbo Pascal

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Podstawy programowania

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Ćwiczenie: JavaScript Cookies (3x45 minut)

Programowanie strukturalne

Tablice. TYPE identyfikator tablicy = ARRAY [Indeksl,..., Indeksn] OF Typ; Dany identyfikator_ tablicy można wykorzystać w deklaracji VAR:

Programowanie w językach

Wykład 4. Tablice. Pliki

Zasady programowania Dokumentacja

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne. TEMAT 8: Moduły standardowe

Pascal - wprowadzenie

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Lekcja 6: Pascal. Procedura i funkcja

Pliki wykład 2. Dorota Pylak

Podstawy i języki programowania

Typy plikowe. 1. Wprowadzenie. 2. Podstawowe operacje na plikach. Przetwarzanie plików w języku Pascal 1

Podstawy Programowania C++

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Algorytmy i struktury danych

Zasady Programowania Strukturalnego

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Wprowadzenie Tablica jednowymiarowa Tablice wielowymiarowe Algorytmy Rekordy Pliki Zadania Bibliografia

Programowanie w językach wysokiego poziomu

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Wstęp do programowania 2

Obsługa klawiszy specjalnych

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

Lista 5 Typy dynamiczne kolejka

INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU. Instrukcja pętli For to do

Wstęp do programowania. Różne różności

INFORMATYKA. Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki. dr inż. Michał Łanczont

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Funkcje zawarte w bibliotece < io.h >

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Argumenty wywołania programu, operacje na plikach

Podstawy programowania

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Instrukcja do programu BASIC PR-02

Funkcje zawarte w bibliotece < io.h >

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

PODSTAWY PROGRAMOWANIA - PASCAL strona 1/18 INFORMATYKA. Programowanie w języku Pascal. opracowanie : mgr inż. Dominik Sieciński nauczyciel mianowany

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Podstawy programowania

Podstawy programowania

1 Podstawy c++ w pigułce.

Formy dialogowe w środowisku Gnome

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Definicja: Algorytmami sortowania zewnętrznego nazywamy takie algorytmy, które sortują dane umieszczone w pamięci zewnętrznej.

Programowanie w języku Python. Grażyna Koba

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Strumienie, pliki. Sortowanie. Wyjątki.

INFORMATYKA Studia Niestacjonarne Elektrotechnika

SYSTEMY OPERACYJNE ĆWICZENIE POLECENIA SYSTEMU MSDOS

Strumienie, pliki. Sortowanie. Wyjątki.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Wstęp do programowania

Temat: Organizacja skoroszytów i arkuszy

Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach

opracował mgr inŝ. Zenon Niewolak-Banach

Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

1 Powtórzenie wiadomości

Transkrypt:

Pliki Dotychczas operowaliśmy danymi, które zapamiętywane były w pamięci operacyjnej komputera (RAM). Program Turbo Pascal umożliwia zapisywanie i odczyt danych, co zapewnia możliwość wielokrotnego ich wykorzystania. Zapamiętywanie danych odbywa się w tzw. plikach danych. Ze względu na typ zawartych w nich danych rozróżnia się trzy podstawowe rodzaje plików: pliki tekstowe zawierające informacje czytelne, składające się z tekstów; pliki elementowe (zwane również zdefiniowanymi), których elementami są najczęściej tablice, rekordy; pliki beztypowe o nieokreślonej strukturze. Pliki tekstowe Pliki tekstowe zawierają informację niezakodowaną, bezpośrednio czytelną. W bloku deklaracyjnym plikowi należy przydzielić jednoznaczną zmienną plikową. Deklaracja zmiennej plikowej dla pliku tekstowego: VAR Nazwa_pliku : Text; Nazwa_pliku jest nazwą zmiennej plikowej. Zanim zostaną wykonane operacje na tekście zawartym w pliku na dysku należy najpierw przyporządkować nazwę pliku dyskowego do konkretnej zmiennej plikowej wykorzystywanej w programie. Do tego celu służy procedura standardowa ASSIGN. Wywołuje się ją tworząc zapis w postaci: ASSIGN (Nazwa_pliku, Nazwa_pliku_dyskowego); gdzie Nazwa_pliku jest nazwą zmiennej plikowej w programie, zaś Nazwa_pliku_ dyskowego jest nazwą rzeczywistą pliku na dysku. Następnie należy otworzyć plik za pomocą jednej ze standardowych procedur RESET, REWRITE lub APPEND. Odpowiednie zapisy tych procedur dla otwarcia pliku mają postać:

RESET (Nazwa_pliku); lub REWRITE (Nazwa_pliku); lub APPEND (Nazwa_pliku); Procedura RESET otwiera tylko już istniejący plik. Natomiast procedura REWRITE otwiera nie tylko nowy plik, ale również plik istniejący. W tym drugim przypadku powoduje to skasowanie zapisu danych w tym pliku. Procedura APPEND powoduje otwarcie pliku wyłącznie do zapisu. Dane będą dopisywane na koniec pliku. Do zamykania pliku stosuje się procedurę CLOSE w postaci: CLOSE (Nazwa_pliku); Zapisywanie i odczytywanie danych z plików tekstowych dokonuje się za pomocą instrukcji Read, Readln, Write i Writeln uzupełnionych o Nazwa_pliku i Lista_argumentów. Po tej zmianie postać instrukcji jest następująca: Read (Nazwapliku, Lista_argumentów); Write (Nazwa_pliku, Listaargumentów); Przy wykorzystaniu funkcji Eof można określić, czy plik znajduje się w pozycji końcowej, tj. przed ostatnim znakiem (Ctrl-Z). Natomiast przy wykorzystaniu funkcji Eoln można określić, czy plik tekstowy znajduje się w pozycji końca wiersza. Obie te funkcje stosuje się w konstrukcji do czytania pliku znak po znaku": VAR F : Text; CH : CHAR;.. RESET (F); WHILE NOT Eof(F) DO WHILE NOT Eoln(F) DO Read(F, CH); Readln(F) Do czytania pliku wierszowo" można natomiast zastosować sekwencję: VAR F : Text;

S : STRING; RESET (F); WHILE NOT Eof(F) DO Read(F, S); Należy pamiętać, że przejścia do kolejnego wiersza w trakcie zapisu/odczytu dokonać można jedynie za pomocą Writeln i Readln. Ćwiczenie 111 Napisać program pozwalający zapisywać i odczytywać dane z pliku tekstowego. Do pliku należy wpisać liczby naturalne od 10 do 30. Program ma tytuł Plik_tekstowy". Zapisać program na dysku w pliku txt_1.pas. W naszym programie przyjmuje się następujące oznaczenia: f - zmienna plikowa, Liczby.dan - nazwa pliku dyskowego. Załóżmy, że plik nie istnieje na dysku. Do pliku dyskowego należy zapisać liczby naturalne od 10 do 30. W bloku deklaracyjnym należy zadeklarować zmienną plikową f w postaci zapisu: f : TEXT; co oznacza, że plik jest plikiem tekstowym. Następnie należy skojarzyć zmienną plikową f z nazwą konkretnego pliku dyskowego Liczby.dan. Skojarzenie to będzie miało postać: ASSIGN (f, Liczby.dan); Zakładając, że plik uprzednio nie istniał, do utworzenia i jednocześnie otwarcia pliku należy skorzystać z procedury REWRITE w postaci zapisu REWRITE ( f); Następnie należy do pliku zapisać liczby naturalne. Uzyskuje się to korzystając z poniższej konstrukcji: FOR i:=10 TO 30 DO Write (f, i:4); Instrukcja Write jest wzbogacona o zmienną plikową i ma postać: Write (f, i:4); Po zapisaniu danych należy zamknąć plik przez podanie CLOSE ( f).

Liczby są więc zapisane w pliku dyskowym Liczby.dan znajdującym się na dysku. Pozostaje już tylko odczytać zawartość pliku. Ponieważ plik istnieje, do jego otwarcia należy wybrać procedurę RESET. Otwarcie pliku do odczytu ma postać: RESET ( f ); Odczytanie zawartości pliku umożliwi poniższa sekwencja: WHILE NOT Eof(f) DO Read (f, i); Write (i:5); Instrukcja Read jest wzbogacona o zmienną plikową i ma postać: Read (f, i); Po odczytaniu danych należy zamknąć plik przez podanie CLOSE ( f). Cały program został przedstawiony poniżej: PROGRAM Plik_tekstowy; USES Crt; VAR f : TEXT; (* zmienna plikowa *) i : INTEGER; (******************************) ClrScr; ASSIGN (f, 'Liczby.dan'); (* skojarzenie nazwy zmiennej plikowej ' f' z rzeczywista nazwa pliku na dysku Liczby.dan *) REWRITE(f); (* otwarcie pliku - zakładamy, ze nie istniał on uprzednio *) FOR i:=10 TO 30 DO Write (f, i:4); (* zapisanie liczby do pliku *) CLOSE (f); (* zamkniecie dostępu do pliku *) Writeln (' Plik "Liczby.dan" zawiera liczby od 10 do 30 co l'); REPEAT UNTIL KeyPressed; Writeln (' Odczytanie pliku Liczby.dan ');

RESET (f); (* otwarcie pliku juz istniejącego *) WHILE NOT Eof(f) DO Read (f, i); (* czytanie liczb z pliku *) Write (i:5); (* wyświetlanie liczby *) CLOSE (f) (* zamkniecie dostępu do pliku *) END. Ćwiczenie 112 Napisać program kopiujący zawartość jednego pliku tekstowego linia po linii do drugiego pliku tekstowego i dopisujący go na końcu istniejącego tekstu. Program ma tytuł Plik_kopiujacy_liniami". Zapisać program na dysku w pliku o nazwie txt_2.pas. W programie wykorzystano procedurę APPEND otwierającą istniejący plik naz_2 i dopisującą dane na koniec tego pliku. Funkcja Eof podaje wartość TRUE, jeśli napotka koniec pliku. PROGRAM Plik_kopiujacy_liniami; (* kopiowanie danych tekstowych *) USES Crt- VAR pierwszy, drugi : Text; linia : STRING[70]; naz_1, naz_2 : STRING[20]; (************************************************) PROCEDURE Kopiuj(naz_1, naz_2 : STRING); ASSIGN (pierwszy, n a z_1); RESET (pierwszy); ASSIGN (drugi,naz_2); APPEND (drugi); WHILE NOT Eof (pierwszy) DO

Readln (pierwszy,linia); Writeln (drugi,linia); CLOSE (pierwszy); CLOSE (drugi); Writeln (' Skopiowano zawartość pliku: ',naz_1,' do pliku: ',naz_2); (*******************************************) ClrScr; Writeln (' Kopiowanie danych tekstowych'); Writeln (' z pliku wejściowego i dopisywanie ich '); Writeln (' na końcu tekstu pliku wyjściowego '); Write (' Podaj nazwę pliku wejściowego...: '); Readln (naz_1); Write (' Podaj nazwę pliku wyjściowego...: '); Readln (naz_2); Kopiuj (naz_1, naz_2); END. Ćwiczenie 113 Napisać program pozwalający kopiować zawartość jednego pliku tekstowego znak po znaku do drugiego pliku tekstowego. Program ma tytuł Plik_kopiujacy_znakami". Zapisać program na. dysku w pliku txt_3.pas. Ćwiczenie 114 Napisać program tworzący na dysku plik tekstowy oraz umożliwiający odczytanie wprowadzonego do niego tekstu. Do pliku należy wpisać dowolny tekst. Program ma tytuł Zakładanie_pliku_tekstowego". Program wykorzystuje wyłączanie dyrektywy kompilatora (*$I-*) oraz jej włączanie (*$I+*). Zapisać program na dysku w pliku txt_4.pas. W jednym z poprzednich ćwiczeń powstał program również zakładający plik tekstowy na dysku, ale do niego zostały wprowadzone dane w postaci ciągu liczbowego. Teraz

należy napisać program umożliwiający wprowadzenie do niego tekstu. Program wykorzystuje wyłączanie dyrektywy kompilatora (*$I-*) oraz jej włączanie (*$I+*). Zmienna tekst kończy zapisywanie tekstu z chwilą wypisania ' *** '. Przy korzystaniu z procedury RESET w przypadku podania nieprawidłowej ścieżki dostępu do pliku (lub gdy plik nie istnieje), program zostaje przerwany z sygnalizacją błędu (błąd 2 - nie znaleziono pliku). Tym niepożądanym przerywaniom wykonywania programów można zapobiec stosując standardową funkcję IOResult. Dyrektywą kompilatora (*$I-*) wyłącza się kontrolę wykonywania operacji wejścia - wyjścia. Oczywiście w przypadku wystąpienia błędu program będzie dalej wykonywany, co zostanie wychwycone przez funkcję IOResult. Dyrektywa kompilatora (*$I+*) włącza na nowo kontrolę przy każdej operacji we/wy. W poniższym programie FUNCTION Istnieje_plik sprawdza, czy istnieje plik o nazwie, która ma zostać przydzielona nowemu plikowi i informuje o wyniku sprawdzenia. Jeśli plik nie istnieje, to poleca go najpierw utworzyć. Jeśli zaś plik istnieje, informuje o możliwości utraty jego danych w przypadku jego ponownego utworzenia" wraz z otwarciem. Dzięki wyłączonemu systemowi kontroli nie ma przerwania pracy programu. W programie uzyskano sygnał dźwiękowy dzięki wprowadzeniu znaku #7. Cały program został przedstawiony poniżej: PROGRAM Zakladanie_pliku_tekstowego; USES Crt; VAR f : Text; z : CHAR; n_plik : STRING[30]; tekst : STRING[80]; Nowy_plik : Boolean; Wybrany_klawisz : CHAR; TYPE Dostep = STRING[40]; (******************************************************) (* sprawdzenie czy plik juz istnieje *) FUNCTION Istnieje_plik (Nazwa_pliku : Dostęp): Boolean;

(*$I-*) (* wyłączenie systemu kontrolnego *) Assign(f, Nazwa_pliku); Reset (f); (*$I+*) (* uruchomienie systemu kontrolnego *) IF IOResult = 0 THEN (* plik istnieje! *) Close (f); Istnieje_plik := TRUE END ELSE (* plik jeszcze nie istnieje! *) Istniej e_plik := FALSE (****************************************************) CIrScr; Nowy_plik := TRUE; Writeln (' Zakładanie pliku tekstowego '); Write (' Podaj nazwę zakładanego pliku...: '); Write (' ( Nie podasz - nazwa domyślna pliku :)'); Writeln (' tx t_ 1.dan '); Write (' Nazwa pliku...: '); Readln (n_plik); IF LENGTH (n_plik)=0 THEN n_plik:= 'text_1.dan'; IF Istnieje_plik (n_ plik) THEN (* plik istnieje - to czy zastąpić go nowym? *)

Writeln (' Uwaga!!!*); Writeln (' Plik istnieje, #7#7#7,' Wszystkie ',+ ' dotychczasowe dane zostaną usunięte z pliku!'); REPEAT Write (' Wykonywać dalej? (T)ak / (N)ie : '); Readln (Wybrany_klawisz); UNTIL Wybrany_klawisz IN ['T', t', N', n']; IF Wybrany_klawisz IN ['N', n ] THEN Nowy_plik := FALSE (* nie tworzyć nowego pliku! *) IF Nowy_plik THEN (* tworzenie nowego pliku *) ClrScr; ASSIGN (f, n_plik); REWRITE (f); Writeln (' Nowo utworzony plik nosi nazwę...: ', n_plik ); Writeln (' Pisz tekst w każdym wierszu co najwyżej 70 znaków '); Writeln (' Gdy koniec tekstu wciśnij < ENTER >,'); Writeln (' wpisz < *** > i ponownie wciśnij < ENTER >'); Readln (tekst); WHILE tekst<> ****' DO Writeln (f, tekst); Readln (tekst); CLOSE (f); ClrScr;

Writeln (' Odczytanie tekstu z pliku,n_plik ); RESET(f); WHILE NOT Eof(f) DO Readln (f, tekst); Writeln (tekst); REPEAT UNTIL KeyPressed; CLOSE (f); ClrScr; Write (' Nacisnij dowolny klawisz '); WHILE Keypressed DO z:=readkey; END. Ćwiczenie 115 Napisać program obliczający liczbę stów w pliku tekstowym. Program ma tytuł Obliczanie_liczby_slow". Zapisać program na dysku w pliku txt_5.pas. Uwaga: Zakładamy, że poszczególne słowa w pliku tekstowym są oddzielone znakiem spacji, tabulacji lub końcem linii. Między słowami występuje tylko jedna spacja. Ćwiczenie 116 Napisać program pozwalający drukować linię tekstu w kolejności odwrotnej. Program ma tytuł Linia_odwrotnie". Zapisać program na dysku w pliku o nazwie txt_6.pas. Ćwiczenie 117 Napisać program porównujący dwa pliki tekstowe. Program ma tytuł Porównywanie_ plików _txt". Zapisać program na dysku w pliku txt_7.pas. Uwaga: W programie sprawdza się równość znaków do końca krótszego pliku. W przypadku pozytywnego wyniku sprawdzamy długość plików.

Ćwiczenie 118. Napisać program wyświetlający na ekranie zawartość pliku tekstowego. Podczas wyświetlania będzie możliwość przewijania o jedną linię w dół lub w górę. Program ma tytuł Przewijanie_plikujxt". Zapisać program na dysku w pliku txt_8.pas. Ćwiczenie 119 Napisać program wyszukujący w pliku tekstowym pytania, które następnie są wyświetlane na ekranie. Program ma tytuł Szukanie_pytan". Zapisać program na dysku w pliku txt_9.pas. Ćwiczenie 120 Napisać program wyświetlający na ekranie zawartości pliku tekstowego, poczynając od wskazanej linii. Naciśnięcie klawisza Esc powinno kończyć wyświetlanie tekstu. Program ma tytuł Wyświetlanie_tekstu_od_linii". Zapisać program na dysku w pliku txt_10.pas. Ćwiczenie 121 Napisać program usuwający z pliku tekstowego wszystkie nieparzyste słowa. Program ma tytuł Usuwamy_nieparzyste_slowa". Zapisać program na dysku w pliku txt_11.pas. Pliki elementowe Pliki elementowe (zwane również zdefiniowanymi) są to pliki, w których przechowywana informacja występuje w postaci zakodowanej. Nie ma więc możliwości bezpośredniego ich odczytania. Deklaracja zmiennej plikowej: Nazwa_pliku : FILE OF Typ_złożony Nazwa_pliku jest nazwą zmiennej plikowej, zaś Typ_złożony jest typem prostym lub strukturalnym. Przyporządkowania nazwy pliku dyskowego do danej zmiennej plikowej dokonuje się za pomocą procedury ASSIGN (podobnie jak dla plików tekstowych). Do otwierania plików wykorzystuje się procedury RESET i REWRITE (bez APPEND). Plik zamyka się za pomocą procedury CLOSE

Ćwiczenie 122 Napisać program pozwalający zapisywać dane do pliku elementowego w postaci ciągu liczb rzeczywistych od -10 do 10 z krokiem 0.5. Program ma tytuł Plik_elementowy". Zapisać program na dysku w pliku elem_1l.pas. Cały program został przedstawiony poniżej: PROGRAM Plik_elementowy; USES Crt; VAR x : REAL; f : FILE OF REAL; nazwa : STRING[30]; Wybrany_klawisz : CHAR; Istnieje_plik : Boolean; (********************************************************) ClrScr; Writeln (' Zakładanie pliku elementowego na dysku ); Writeln (' i wprowadzenie do niego liczb rzeczywistych'); Istnieje plik := TRUE; Writeln (' Podaj nazwę pliku...:'); Write ('( Nie podasz - nazwa domyślna pliku :)'); Writeln (' rzecz_1.dan '); Readln (nazwa); IF LENGTH (nazwa)=0 THEN nazwa: = 'rzecz_1.dan'; ASSIGN (f, nazwa); {$1-} RESET (f); {$1+} IF IOResult = 0 THEN (* plik istnieje - to czy zastąpić go nowym? *)

Writeln ( Uwaga!!!'); Writeln (' Plik istnieje - ',#7#7#7,' Wszystkie ',+ 'dotychczasowe dane zostaną usunięte z pliku!'); REPEAT Write ( Wykonywać dalej? (T)ak / (N)ie : '); ReadLn(Wybrany_klawisz); UNTIL Wybrany klawisz IN ['T', t', N', n']; IF Wybrany_klawisz IN ['N', n'] THEN Istnieje_plik := FALSE (* nie tworzyć nowego pliku! *) IF Istnieje_plik THEN (* tworzenie nowego pliku *) ASSIGN (f, nazwa); REWRITE (f); x:=-10.0; WHILE x<=10.0 DO Write (f, x); x:=x+0.5 CLOSE (f); Writeln (' Nowo utworzony plik nosi nazwę : ',nazwa ); Readln; END. Ćwiczenie 123 Napisać program pozwalający wyznaczyć liczbę elementów w pliku elementowym. Program ma tytuł Wyznaczenie_liczby_elementow_w_pliku". Zapisać program na dysku w pliku elem_2.pas.

W programie wykorzystamy wcześniej poznaną konstrukcję, dostosowaną do wymagań zadania, do czytania pliku znak po znaku": WHILE NOT Eof(f) DO Read (f, x); ile:=ile+1; Czytanie pliku zostaje zakończone po przeczytaniu ostatniego elementu, a następnie zostaje wyświetlona zawartość licznika ile. Cały program został przedstawiony poniżej: PROGRAM Wyznaczenie_liczby_elementow_w_pliku; USES Crt; VAR ile : INTEGER; (* ile elementów w pliku *) x : REAL; f : FILE OF REAL; nazwa : STRING; (**************************************) ClrScr; Writeln (' Wyznaczenie liczby elementów w pliku'); Write (' Podaj nazwę pliku z danymi: '); Readln (nazwa); IF LENGTH (nazwa) =0 THEN nazwa:= 'rzecz_1.dan'; ASSIGN (f, nazwa); RESET (f); ile:=0; WHILE NOT Eof(f) DO Read (f, x); ile:=ile+1; CLOSE(f); (* zamknij plik*)

Writeln ('W pliku :',nazwa,' jest ',ile,' liczb rzeczywistych'); Readln; END. Ćwiczenie 124 Napisać program pozwalający odczytać dane z pliku elementowego zawierającego ciąg liczb rzeczywistych. Program ma tytuł OdczytanieJiczb_rzeczywistych"'. Zapisać program na dysku w pliku elem_3.pas. Ćwiczenie 125 Napisać program pozwalający wyznaczyć maksymalną i minimalną liczbę w pliku elementowym zawierającym liczby rzeczywiste. Program ma tytuł Liczby_max_i_min". Zapisać program na dysku w pliku elem_4.pas. Ćwiczenie 126 Napisać program kopiujący plik elementowy zawierający liczby rzeczywiste. Program ma tytuł Kopiowanie_pliku". Zapisać program na dysku w pliku elem_5.pas. Ćwiczenie 127 Napisać program pozwalający na utworzenie pliku elementowego przechowującego tablicę. Program ma tytuł Tablica_w_pliku". Zapisać program na dysku w pliku elem_6.pas. Operacje na plikach elementowych Do wyboru określonego elementu z pliku elementowego służy tzw. wskaźnik pliku. Do ustawiania tego wskaźnika pliku na określonym elemencie służy procedura SEEK. Należy pamiętać, że elementy są numerowane od zera. Zapis procedury SEEK ma postać: SEEK (VAR f, poz: LONGINT); Przykładowy zapis: SEEK (f_1, 5);

oznacza ustawienie wskaźnika pliku w pliku identyfikowalnym zmienną plikową f_1 na pozycji 6 (5+1). W celu określenia pozycji wskaźnika pliku w pliku identyfikowalnym zmienną plikową f stosuje się funkcję FilePos. Zapis funkcji FilePos ma postać: FilePos (VAR f) : LONGINT; Przykładowy zapis: Poz:=FilePos ( f_l); Przy określaniu liczby elementów w pliku identyfikowalnym zmienną plikową f pliku stosujemy funkcję FileSize. Zapis funkcji FileSize ma postać: FileSize (VAR f) : LONGINT; Przykładowy zapis: liczba :=FileSize (f_l ); Jeśli plik jest pusty to podawana jest wartość zero. Ćwiczenie 128 Napisać program pozwalający zapisywać dane do pliku elementowego w postaci ciągu liczb naturalnych od 1 do 10. Następnie zmienić wartość 3. elementu z tego ciągu. Program ma tytuł Zmiana _w artosci". Zapisać program na dysku w pliku elem_7.pas. W pierwszej części programu liczby ciągu (elementy) wraz z ich numerem pozycji zostają zapisane do pliku. Dla zapisu pozycji liczb oraz ich wartości wykorzystuje się jedną zmienną, tj. x. Następnie ustawić należy wskaźnik pliku na 2. pozycji (Uwaga: pozycje numerowane są od 0), tj. na 3. elemencie, co przedstawia poniższy zapis: SEEK (f, 2); Przy ustawionej pozycji można dokonać odpowiedniej zmiany wartości tego elementu korzystając z instrukcji podstawienia: x:=23; Następnie w pliku zostaje dokonany zapis nowej wartości elementu. Write (f, x);

Przed odczytaniem zawartości pliku wskaźnik pliku zostaje ustawiony na pierwszym elemencie: SEEK (f, 0); Do odczytania elementów pliku należy skorzystać z instrukcji FOR oraz dwóch zmiennych x i y. Wartość x określa numer pozycji elementu (liczby), zaś y wartość elementu położonego na tej pozycji. Sekwencja odczytująca elementy pliku ma postaci: FOR x:=l TO 10 DO Read (f, y); Writeln (',x:2,' y:2); Cały program został przedstawiony poniżej: PROGRAM Zmiana_wartosci; USES Crt; VAR f : FILE OF INTEGER; x : INTEGER; y : INTEGER; ch : CHAR; (***************************************) ClrScr; ASSIGN (f, 'plik.dok'); REWRITE (f); Writeln (' Zmiana wartości elementu'); Writeln (' Poz. Wartość '); FOR x:=1 TO 10 DO Write (f, x); Writeln (',x:2,' - ', x:2); (* wprowadzamy zmianę w 3. elemencie *)

SEEK (f, 2); (* ustawienie wskaźnika na 3. elemencie *) x:=23; (* ustawienie nowej wartości *) Write (f, x); (* zapisanie do pliku *) SEEK (f, 0); (* ustawienie wskaźnika na pierwszym elemencie *) Writeln (' Po zmianie wartości na pozycji 3.'); FOR x:=1 TO 10 DO Read (f, y); Writeln (' ',x:2,' - ', y:2); ch:=readkey; END. Ćwiczenie 129 Napisać program pozwalający na utworzenie pliku elementowego przechowującego tablicę jednowymiarową. Zapisać do tablicy 10 liczb rzeczywistych. Następnie zmienić wartość 4. i 7. elementu w ten sposób, ze ich nowe wartości są dwukrotnie większe od poprzednich. Program ma tytuł Zmiana_w_tablicy". Zapisać program na dysku w pliku elem_8.pas.