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

Podobne dokumenty
Wykład PASCAL - Pliki tekstowe

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

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Pliki. Operacje na plikach w Pascalu

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

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

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

Wprowadzenie Tablica jednowymiarowa Tablice wielowymiarowe Algorytmy Rekordy Pliki Zadania Bibliografia

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

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

Algorytmy i struktury danych

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

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

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych

Podstawy Programowania C++

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};

Język programowania PASCAL

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

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

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

Informatyka 1. Przetwarzanie tekstów

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

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}

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

Programowanie w języku Python. Grażyna Koba

Akademia Morska w Szczecinie Wydział Nawigacyjny TRANSPORT MORSKI

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Podstawy programowania skrót z wykładów:

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

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

Wykład 4. Tablice. Pliki

Podprogramy. Procedury

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

Programowanie strukturalne

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

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Zasady programowania Dokumentacja

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

Kompendium wiedzy z Pascala

PASCAL WPROWADZENIE. 1. Uruchom kompilator. 2. Struktura programu w Pascalu. 3. Komentarze

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

Lekcja 6: Pascal. Procedura i funkcja

Wstęp do programowania 2

void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

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

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

Programowanie w językach wysokiego poziomu

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

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie w językach

Algorytmy i struktury danych

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Algorytmy i struktury danych

KURS PASCAL A. 1.Wprowadzenie

Ćwiczenie: JavaScript Cookies (3x45 minut)

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

Podstawy programowania

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

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

ForPascal Interpreter języka Pascal

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

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania

Języki skryptowe w programie Plans

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Instrukcja warunkowa i złoŝona.

Interpreter - EasyCompile

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

KaŜdy z formularzy naleŝy podpiąć do usługi. Nazwa usługi moŝe pokrywać się z nazwą formularza, nie jest to jednak konieczne.

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

Pliki. Informacje ogólne. Obsługa plików w języku C

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

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

PODSTAWY PROGRAMOWANIA

Programowanie w Turbo Pascal

Języki programowania obiektowego Nieobiektowe elementy języka C++

Wstęp do programowania 2

Wstęp do programowania

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

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wprowadzenie komentarzy do programu

Program 14. #include <iostream> #include <ctime> using namespace std;

Tabela wewnętrzna - definicja

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

Podstawy Programowania Podstawowa składnia języka C++

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

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

Delphi Laboratorium 3

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2)

ZASADY PROGRAMOWANIA KOMPUTERÓW

Pliki wykład 2. Dorota Pylak

Algorytmy i struktury danych. wykład 1

Elementy Pascala Konstrukcja programu w Pascalu Typy danych

Transkrypt:

PLIKI Plik jest struktura składającą się z elementów tego samego typu. Liczba elementów składowych pliku jest zmienna. Nie ma zadanych ograniczeń na liczbę elementów pliku, poza rozmiarami pamięci masowych komputera. Długość pliku moŝe być dowolnie zwiększana lub zmniejszana. Elementy pliku nie posiadają indeksów ani nazw (inaczej niŝ ma to miejsce w przypadku tablic i rekordów). Elementy pliku ułoŝone są sekwencyjnie, a program w danej chwili ma dostęp tylko do jednego z nich. Plik jest logicznym modelem fizycznego zasobu danych. W programie zmienna plikowa kojarzona jest z konkretnym zewnętrznym plikiem zapisanym w pamięci masowej komputera. Pliki stosowane są w przypadkach, gdy istnieje potrzeba długotrwałego przechowywania danych, wyników pośrednich itp., szczególnie duŝych zbiorów informacji na nośnikach masowych. Program moŝe korzystać z wielu plików jednocześnie. Składnia deklaracji zmiennej plikowej: file of <typ> Występujący w definicji typ oznacza identyfikator dowolnego typu prostego, porządkowego, strukturalnego lub wskaźnikowego, który definiuje typ elementu pliku. Typ elementu nie moŝe być jednak typem plikowym, ani typem złoŝonym zawierającym elementy typu plikowego. JeŜeli po słowie kluczowym file nie występuje określenie typu elementu, to taki typ słuŝy do deklaracji plików niezdefiniowanych. Przykłady: type liczby = file of integer; znaki = file of char; Typy plikowe liczby i znaki składają się z elementów będących liczbami całkowitymi lub znakami. type mac = array [1..10, 1..10] of real; wektory = file of array [1..10] of real; macierze = file of mac; Identyfikatory wektory i macierze są nazwami typów plikowych o elementach tablicowych. type data = record dzien: 1..31; miesiac: 1..12; rok: 0..2000; student = record nazwisko, imie: string[20]; miejscowosc: string[15]; data_ur: data; plec: (mezczyzna, kobieta);

semestr: 1..10; daty = file of data; studenci = file of student; Elementami typów plikowych daty i studenci są rekordy. Najczęściej wykorzystuje się pliki o elementach rekordowych. W Pascalu istnieje predefiniowany typ plikowy o nazwie TEXT. Elementami takiego pliku są znaki. Pliki o deklaracji FILE OF CHAR lub TEXT nazywane są plikami tekstowymi. Mogą być obsługiwane tak jak pliki elementowe (element to jeden znak) lub z wykorzystaniem procedur we-wy. Jak wynika z zamieszczonego wyŝej diagramu składni deklaracji plików moŝliwe jest uŝywanie plików bez zdefiniowania typu elementu. Pliki niezdefiniowane nie będą tutaj omawiane. Dostęp do pliku uzyskuje się za pomocą zmiennej plikowej, tj. zmiennej zadeklarowanej jako typu plikowego. Przykład: var numery: liczby; symbol: znaki; m: macierze; grupa: studenci; Wykorzystanie plików w kaŝdym języku programowania wiąŝe się z przestrzeganiem odpowiedniej procedury postępowania rozpoczynającej się od uzyskania dostępu do fizycznie istniejącego pliku dyskowego pozostającego dotychczas pod kontrola systemu operacyjnego, a kończącą się zwolnieniem go. W Pascalu obowiązuje następujące następstwo czynności związanych z obsługą plików: 1. Deklaracja zmiennej plikowej 2. Skojarzenie nazwy z fizycznym plikiem zewnętrznym 3. Otwarcie pliku 4. Wykonywanie operacji na pliku (czytanie i pisanie) 5. Zamkniecie pliku SKOJARZENIE PLIKU Z FIZYCZNYM ZBIOREM DANYCH Do tego celu słuŝy procedura Assign, wiąŝąca zewnętrzną nazwę pliku zgodna ze składnią obowiązującą w systemie operacyjnym z daną zmienną plikową. Wywołanie standardowej procedury ASSIGN ma postać: ASSIGN(nazwa_pliku, string); Pierwszy parametr powinien być zadeklarowaną uprzednio nazwą zmiennej plikowej, a drugi łańcuchem zawierającym zewnętrzną nazwę pliku wraz z ewentualna ścieŝką dostępu i rozszerzeniem.

Np. ASSIGN(symbol, 'zbior'); ASSIGN(numery, 'a:\kat\baza.ptp'); Struktura elementu kojarzonych fizycznych zbiorów danych powinna być zgodna z definicją typu elementu pliku, który reprezentowany jest przez zmienną. OTWARCIE PLIKU Przed rozpoczęciem przetwarzania pliku naleŝy go otworzyć jedną z trzech procedur: Rewrite, Reset lub Append. Sposób wywołania tych procedur zaleŝny jest od rodzaju pliku (zdefiniowany, niezdefiniowany, tekstowy). Dla wszystkich rodzajów plików dozwolone jest uŝycie procedur Reset i Rewrite w postaci: Reset (p); Rewrite (p); gdzie: p - oznacza zmienną plikową. Wywołanie Rewrite powoduje utworzenie nowego fizycznego pliku danych o nazwie skojarzonej ze zmienna plikowa przy pomocy procedury Assign. JeŜeli plik fizyczny o takiej nazwie istnieje to zostanie skasowany. W obu przypadkach zostanie utworzony plik pusty, a jego ustawienie będzie wskazywać na początek. Otwarcie pliku procedura Reset powoduje ustawienie zewnętrznego pliku fizycznego w pozycji początkowej, tj. przed pierwszym elementem. W tym przypadku plik zewnętrzny skojarzony ze zmienną plikową musi istnieć (w przeciwnym przypadku powoduje to powstanie błędu wejścia-wyjścia). W przypadku plików tekstowych (tj. o definicji FILE OF CHAR lub TEXT) do otwarcia moŝna uŝyć procedury Append w następujący sposób: Append (p) Rezultatem takiego wywołania jest ustalenie pliku na pozycji końcowej umoŝliwiające dopisywanie tekstów na końcu pliku. OPERACJE NA PLIKU ELEMENTOWYM (zapis i odczyt z pliku) Zapis informacji do pliku Do wprowadzania elementów (z pamięci) do pliku stosuje się procedurę: Write(p, lista_zmiennych) gdzie: p - oznacza zmienna plikowa,

lista_zmiennych - jest lista zmiennych typu zgodnego z typem elementu pliku, których wartości maja być zapisane pliku zewnętrznego skojarzonego ze zmienna p, Wywołanie procedury standardowej WRITE musi być poprzedzone otwarciem pliku i powoduje wykonanie dla kaŝdej zmiennej z listy_zmiennych następujących dwu czynności: - zapis do pliku wartości zmiennej, - przesuniecie pliku o jeden element. Odczyt informacji z pliku Standardowa procedura czytania z pliku ma postać: Read(p, lista_zmiennych) gdzie: p - oznacza zmienna plikowa, lista_zmiennych - jest lista zmiennych typu zgodnego z typem elementu pliku, którym nadane zostaną wartości kolejnych elementów pobieranych z pliku p, Wywołanie procedury standardowej READ musi być poprzedzone otwarciem pliku i powoduje wykonanie dla kaŝdej zmiennej z listy_zmiennych następujących dwu czynności: - odczyt wartości bieŝącego elementu z pliku i przypisanie jej pod zmienną, - przesuniecie pliku o jeden element. W naszej praktyce dostęp do elementów pliku będziemy uzyskiwali wyłącznie w drodze odczytania ich instrukcja Read. Przyjmujemy, ze elementy pliku nie posiadają swoich identyfikatorów i ich wartości mogą być znane tylko po przepisaniu do zmiennej wymienionej jako drugi (i/lub następny) parametr procedury Read. ZAMKNIECIE PLIKU Ostatnią z prezentowanych procedur jest: Close(p) gdzie: p - oznacza zmienna plikowa. Procedura ta zamyka plik otwarty wcześniej jedna z procedur Reset, Rewrite lub Append. Po tej operacji niedozwolone jest uŝycie Ŝadnej z funkcji lub procedur z argumentem p oznaczającym zamknięty plik (za wyjątkiem procedur otwarcia i APPEND). Zamkniecie pliku powoduje wykonanie określonych przez system operacyjny czynności związanych ze zwolnieniem zewnętrznego fizycznego pliku danych. Jednocześnie uŝywana w programie zmienna plikowa zostaje "zwolniona" i moŝe być skojarzona z innym zewnętrznym plikiem. Przykłady: 1) Napisz program zapisywania w pliku typu FILE OF INTEGER 10 podanych przez uŝytkownika liczb.

Program Liczby; var buf, i: integer; pl: file of integer; ASSIGN(pl, 'Liczby'); REWRITE)pl); for i:=1 to 10 do read(buf); WRITE(pl, buf); CLOSE(pl); end. W przykładzie powyŝszym operacje na pliku prowadzone są w kolejności zgodnej z obowiązującym opisanym wyŝej schematem postępowania - deklaracja - skojarzenie z nazwą pliku zawietrznego (Liczby) - operacje zapisu na plik - zamkniecie. NaleŜy zwrócić uwagę, ze w przykładzie uŝyto jednak procedury plikowej (READ) w sposób niezgodny ze standardem. Wywołanie w postaci: read(buf); nie zostało poprzedzone otwarciem pliku, ani nawet odpowiednią deklaracją. Poza tym w wywołaniu umieszczono tylko jeden parametr - nie ma zmiennej plikowej. Taki sposób operacji plikowych jest dopuszczalny w odniesieniu do pewnych plików predefiniowanych, tu pliku INPUT skojarzonego z klawiaturą. Omówienie takich plików nastąpi poniŝej. 2) Napisać program obliczania sumy liczb wpisanych uprzednio do pliku LICZBY. var s: real; buf, i: integer; pl: file of integer; ASSIGN(pl, 'Liczby'); RESET)pl); s:=0; for i:=1 to 10 do READ(pl, buf); s:=s+buf; CLOSE(pl); writeln('suma=',s:8:2); end. W związku z prezentacja powyŝszego przykładu naleŝy podkreślić zasadniczą zaletę struktur plikowych: poniewaŝ pliki są przechowywane w pamięciach zewnętrznych, to po wprowadzeniu danych do pliku moŝna z nich wielokrotnie korzystać, takŝe z innych programów i nawet po długim czasie od chwili zapisu. Ponadto plik stanowi odrębną całość nie związaną na stałe z Ŝadnym programem, a zapisany na przenośnym nośniku moŝe być przeniesiony na inny komputer. 3) Napisać w postaci procedury algorytm zapisywania w pliku danych o N osobach. Dane powinny zawierać nazwisko, wiek i płeć kaŝdej osoby.

type osoba = record naz: string[20]; plec: (kobieta, mezczyzna); wiek: byte; plik = file of osoba; procedure zapisz(var a: plik); var i,n: integer; buf: osoba; pom: char; readln(n); for i:=1 to n do readln(buf.naz); readln(pom); if (pom='k') or (pom='k') then buf.plec:=kobieta else buf.plec:=mezczyzna; readln(buf.wiek); WRITE(a, buf); W przykładzie tym zastosowano plik o elementach rekordowych, składających się z trzech pól. W procedurze umieszczono jedynie wywołanie procedury zapisu na plik WRITE - zakłada się, Ŝe pozostałe operacje związane z obsługą pliku przeprowadzone będą w segmencie programu w którym wywołana będzie procedura ZAPISZ. Jak widać na przykładzie operacje zapisu na plik naleŝy przeprowadzać wpisując od razu cały element. Dlatego w kaŝdym cyklu pętli zapis naleŝy poprzedzić operacja "kompletowania" poszczególnych pól pomocniczej zmiennej rekordowej buf, która pełni role bufora pośredniczącego w przekazywaniu informacji od uŝytkownika do pliku. Operacja "kompletowania" jest tu utrudniona poniewaŝ typ pola płeć jest zdefiniowany przez wyliczenie. Identyfikatory stałych występujące w typie wyliczeniowym: KOBIETA i MEZCZYZNA istnieją tylko w programie i nie mogą być wprowadzone bezpośrednio instrukcją READ. Informacje o płci osoby uŝytkownik określa podając literę 'k' duŝą lub małą w przypadku kobiety, a dowolny inny znak w przypadku męŝczyzny. Dopiero w programie następuje ustalenie odpowiedniej zawartości pola PLEC. Nie ma natomiast przeszkód do zapisywania wartości wyliczeniowych w polach (czy jako cale elementy) plików elementowych. NaleŜy zwrócić uwagę, Ŝe deklaracja parametru plikowego procedury zawiera słówko VAR - przekazywanie przez zmienną. Z uwagi na fakt, Ŝe operacja przypisania zmiennej plikowej nie istnieje nie ma innej moŝliwości przekazywania plikowych parametrów procedur przekazywanie przez wartość jest niedopuszczalne. 4) Napisać procedurę drukującą nazwiska i wyznaczającą liczbę kobiet w wieku nie przekraczającym 23 lat, zakładając istnienie pliku o elementach typu OSOBA zdefiniowanego w przykładzie poprzednim. type osoba = record naz: string[20]; plec: (kobieta, mezczyzna); wiek: byte;

plik = file of osoba; procedure odszukaj(var a: plik; var l: integer); var i,n: integer; buf: osoba; pom: char; RESET(a); l:=0; while not EOF(a) do READ(a, buf); if (buf.wiek <= 23) and (buf.plec=kobieta) then Writeln('buf.naz); l:=l+1; W procedurze uŝyto operacji RESET w celu ustawienia pliku na pierwszym elemencie (by odpowiednio rozpocząć przeglądanie pliku). Elementy pliku odczytywane są i odpowiednio interpretowane w pętli o nagłówku WHILE NOT EOF(a) DO. Zastosowano funkcje logiczna EOF sygnalizująca koniec pliku. Te i niektóre inne pomocniczo stosowane w Pascalu predefiniowane funkcje i procedury opisano poniŝej. Funkcje i procedury operujące na plikach Podczas odczytu lub zapisu elementów z/do pliku moŝliwe jest wykorzystanie funkcji i procedur standardowych ułatwiających przetwarzanie pliku: Eof (p) - pliki elementowe i tekstowe FilePos (p) - pliki elementowe i tekstowe FileSize (p) - pliki elementowe i tekstowe Seek (p,pozycja) - pliki elementowe i tekstowe Truncate (p) - pliki elementowe i tekstowe Eoln (p) - pliki tekstowe SeekEof (p) - pliki tekstowe SeekEoln (p) - pliki tekstowe Funkcja Eof zwraca wartość true, gdy plik znajduje się w pozycji tuŝ przed znakiem końca pliku lub gdy plik jest pusty. W innych przypadkach Eof daje wartość false. Funkcja Eof najczęściej wykorzystywana jest w programie w instrukcjach powtarzania jako warunek dalszego czytania z pliku. Funkcja FilePos zwraca wartość określającą aktualną pozycję w pliku (liczba LONGINT z przedziału <1,FileSize(p)>). JeŜeli plik jest w pozycji początkowej (np. po wykonaniu procedury Reset lub Rewrite) to funkcja zwraca wartość 0. Liczbę wszystkich elementów pliku moŝna wyznaczyć przy pomocy funkcji FileSize (wynik - liczba typu LONGINT).

Przetwarzanie plików odbywa się przewaŝnie w sposób sekwencyjny tzn. element po elemencie. Kolejność tę moŝna zmienić stosując procedurę Seek podając jako drugi argument zadana pozycję pliku (czyli numer elementu). Elementy pliku są numerowane poczynając od 0. Zastosowanie procedury Truncate powoduje usuniecie z zewnętrznego pliku wszystkich jego elementów począwszy od aktualnej pozycji do końca zbioru. Procedura Eoln ma zastosowanie w przypadku przetwarzania plików tekstowych i zwraca wartość true, tylko wtedy jeŝeli plik znajduje się w pozycji końca wiersza lub końca zbioru. Funkcje SeekEof lub SeekEoln stosuje się równieŝ dla plików tekstowych. Dają podobne wyniki jak Eof i Eoln lecz wykrywają koniec zbioru lub wiersza z ignorowaniem znaków spacji i tabulacji. Funkcje te wykorzystywane są przy wczytywaniu danych numerycznych z plików tekstowych. Z innych procedur operujących na plikach moŝna wymienić następujące: Erase (p) - wszystkie rodzaje plików Rename (p, nowa_nazwa) Procedura Erase powoduje usuniecie zewnętrznego pliku skojarzonego ze zmienną p. Procedura Rename umoŝliwia zmianę nazwy zbioru na nową wyspecyfikowaną w parametrze nowa_nazwa typu łańcuchowego. Procedura ta nie moŝe być zastosowana w przypadku pliku otwartego. Pliki tekstowe Ogólna definicja procedur WRITE i READ: read(plik, lista_zmiennych); readln(plik, lista_zmiennych); write(plik, lista_wyrazen); writeln(plik, lista_wyrazen); Pierwszy parametr tych procedur to nazwa pliku. Parametr ten moŝe być pominięty. Jeśli tak jest to Pascal przyjmuje, Ŝe czytanie i wydruk odbywa się z domyślnych plików INPUT i OUTPUT (standardowo ustawione są klawiatura i ekran). Jeśli parametr pierwszy jest wymieniony, to powinien być zmienną plikową skojarzoną z otwartym plikiem. Operacje we-wy dotyczą tego pliku. Jeśli jest to plik tekstowy to moŝliwe jest czytanie liczb, znaków i napisów oraz wydruk formatowany jak w przypadku standardowej obsługi we-wy. Przykład procedure ZapiszDane(var plik: text; n: integer); var i: integer; x, y: real; writeln('wprowadz ', n, ' wierszy. Po dwie liczby w wierszu');

rewrite(plik); for i:=1 to n do writeln(i, ' wiersz'); write('pierwsza liczba: '); readln(x); write('druga liczba: '); readln(y); writeln(plik, x, y); // writeln(plik, x:8:2, y); close(plik); procedure WyswietlDane(var plik: text); var i: integer; x, y: real; writeln('wydruk zawartosci pliku');writeln; reset(plik); i:=0; while not eof(plik) do i:=i+1; readln(plik, x, y); writeln(i, ' wiersz:', x, ' ',y); writeln;writeln('wyprowadzono ', i, ' linii'); close(plik); procedure WyswietlDane2(var plik: text); var i: integer; x: real; writeln('wydruk zawartosci pliku');writeln; reset(plik); i:=0; while not eof(plik) do i:=i+1; write(i, ' wiersz:'); while not eoln(plik) do read(plik, x); write(x, ' '); readln(plik); writeln; writeln;writeln('wyprowadzono ', i, ' linii'); close(plik);

var p: text; assign(p, 'dane.txt'); ZapiszDane(p, 5); WyswietlDane(p); WyswietlDane2(p); readln; end.