Programowanie strukturalne

Podobne dokumenty
Wstęp do programowania 2

Wstęp do programowania

Pliki. Operacje na plikach w Pascalu

Wykład PASCAL - Pliki tekstowe

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

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

Wstęp do programowania 2

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

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

Biblioteka standardowa - operacje wejścia/wyjścia

PL/SQL. Zaawansowane tematy PL/SQL

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

Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych

Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu

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

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Wstęp do programowania 2

Wyjątki - wprowadzenie

Język programowania PASCAL

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Ada-95. Dariusz Wawrzyniak

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

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

Podstawowe I/O Liczby

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

Oracle PL/SQL. Paweł Rajba.

Wstęp do programowania 2

Programowanie w językach

Bloki anonimowe w PL/SQL

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podstawy i języki programowania

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

Funkcje zawarte w bibliotece < io.h >

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

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

Funkcje zawarte w bibliotece < io.h >

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Pliki wykład 2. Dorota Pylak

Programowanie w językach wysokiego poziomu

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

SQL 4 Structured Query Lenguage

Język PL/SQL Pakiety podprogramów

Oracle PL/SQL. Paweł Rajba.

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

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

Prolog Wejście / wyjście r

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów

System plików. Warstwowy model systemu plików

System plików warstwa logiczna

Język PL/SQL Procedury i funkcje składowane

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

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

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

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

Pakiety podprogramów Dynamiczny SQL

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Zasady programowania Dokumentacja

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

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

Programowanie w Logice

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Procedury i funkcje składowane

Podstawy programowania w Pythonie

Wykład 4. Tablice. Pliki

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

PAMIĘĆ OPERACYJNA...107

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

na podstawie bazy Oracle NoSQL

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

ROZSZERZANIE MOŻLIWOŚCI...

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Wstęp do programowania

Diagramy klas. dr Jarosław Skaruz

Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 2. Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań

Programowanie i struktury danych

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

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

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

Pliki wykład 2. Dorota Pylak

Modelowanie złożonych układów cyfrowych (1)

Znaki globalne w Linuxie

Operacje wejścia/wyjścia (odsłona druga) - pliki

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Systemy plików i zarządzanie pamięcią pomocniczą. Struktura pliku. Koncepcja pliku. Atrybuty pliku

G PROGRAMMING. Part #6

Argumenty wywołania programu, operacje na plikach

Podstawy Programowania

Podstawowe wiadomości o systemach plików.

trainxx tramxx

Układy reprogramowalne i SoC Testbenches. Symulacja sterowana zdarzeniami.

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

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Transkrypt:

Programowanie strukturalne wykład pliki tekstowe Agata Półrola Wydział Matematyki UŁ sem. letni 2011/2012 http://www.math.uni.lodz.pl/~polrola

Pliki wewnętrzne i zewnętrzne Dotychczas przy pobieraniu danych korzystaliśmy ze standardowego wejścia (standard input; zazwyczaj była to klawiatura), a wyniki wyprowadzaliśmy na standardowe wyjście (standard output; zazwyczaj ekran)

Istnieje wiele innych źródeł danych wejściowych czy miejsc do wyprowadzenia danych wynikowych (np. dysk, drukarka...). Nazywa się je plikami zewnętrznymi (external files). Program czyta i zapisuje dane do plików wewnętrznych (internal files). Pliki wewnętrzne są logicznymi miejscami zapisu i pobierania danych

Przed rozpoczęciem odczytu/zapisu danych z plików wewnętrznych program musi skojarzyć je z plikami zewnętrznymi. Jest to nazywane otwarciem pliku wewnętrznego. Skojarzenie to może być różne w różnych wykonaniach programu. Niektóre kompilatory Ady pozwalają na skojarzenie wielu plików wewnętrznych z jednym zewnętrznym, w innych jest to niedozwolone.

Wejście i wyjście tekstowe Dotychczas korzystaliśmy z tekstowego wejścia i wyjścia. W ich przypadku pliki są traktowane jako ciągi znaków. Tekstowa operacja wejścia czyta ciąg następujących po sobie znaków, interpretuje je jako wartość pewnego typu i przekazuje tę wartość do programu Tekstowa operacja wyjścia zapisuje sekwencję znaków reprezentujących pewną wartość pewnego typu

Pliki tekstowe Pliki tekstowe są plikami o dostępie sekwencyjnym (sequential-access files) odczyt danych rozpoczyna się zawsze od początku pliku; zapis jest dokonywany na końcu pliku nie ma możliwości zapisu w dowolnym miejscu pliku i odczytu z dowolnego miejsca pliku

do obsługi plików tekstowych służą pakiety ada.text_io ada.wide_text_io w/w pakiety różnią się tylko typem danych są to odpowiednio sekwencje elementów typu character i wide_character

Typ plikowy i zdefiniowane tryby otwarcia plików Oba pakiety definiują typ plikowy File_Type i typ wyliczeniowy File_Mode zmienne typu file_type stanowią pliki wewnętrzne (służą do odwoływania się do plików zewnętrznych) typ file_mode określa możliwe tryby pracy z plikiem (tryby otwarcia pliku) dla plików o dostępie sekwencyjnym jest to: type File_Mode is (In_File, Out_File, Append_File)

Tryby otwarcia pliku Dane mogą być przekazywane z programu do pliku lub z pliku do programu. Dozwolone operacje zależą od trybu otwarcia pliku. Każdy otwarty plik ma pewien bieżący tryb. Niekiedy można go zmienić przez tzw. resetowanie pliku.

tryb in oznacza, że program może czytać dane z pliku (input file) tryb out oznacza, że program może zapisywać dane w pliku (output file) pliki o dostępie sekwencyjnym mogą być otwarte w trybie append (dopisywania), co oznacza, że program może zapisywać dane do istniejącego pliku, zachowując przy tym jego dotychczasową zawartość

Operacje na plikach zewnętrznych Oba pakiety zawierają podprogramy o tych samych nazwach i roli: tworzenie pliku: procedure Create (File: in out File_Type; Mode: in File_Mode := Out_File; Name: in String := ; Form: in String := ); Parametry Name i Form określają plik zewnętrzny: jego nazwę i pewne cechy związane z systemem

otwieranie pliku: procedure Open (File: in out File_Type; Mode: in File_Mode; Name: in String; Form: in String := ); Parametr Form może być użyty do określenia pewnych cech charakterystycznych pliku zależnych od systemu, np. czy może być współdzielony, czy system może ograniczyć prawa zapisu/odczytu względem tego pliku itp

obie procedury (Create, Open) powodują powiązanie zmiennej plikowej File z plikiem o nazwie podanej w parametrze Name. Od tego momentu odwołujemy się do pliku zewnętrznego używając zmiennej plikowej

Uwaga otwarcie istniejącego już pliku tekstowego w trybie out powoduje że dotychczasowa zawartość pliku znika, a plik zawiera tylko dane zapisane przy ostatnim otwarciu

zamykanie pliku: procedure Close (File: in out File_Type); procedure Delete (File: in out File_Type); Procedury Close i Delete zamykają plik likwidując przy tym powiązanie między plikiem wewnętrznym i zewnętrznym, Delete dodatkowo usuwa zewnętrzny plik jeśli jest to możliwe Ada nie definiuje co stanie się jeśli nie zamkniemy pliku przy kończeniu programu (nie zamyka ich automatycznie). Brak zamknięcia pliku może (ale nie musi) spowodować utratę zapisywanych do niego danych czy problemy z dostępem do pliku

resetowanie pliku: procedure Reset (File: in out File_Type; Mode: in File_Mode); procedure Reset (File: in out File_Type); Resetowanie odpowiada zamknięciu i ponownemu otwarciu pliku w tym samym trybie w którym był otwarty wcześniej (jeśli nie podano nowego trybu), lub otwarciu go w nowym trybie.

określenie stanu pliku: function Is_Open (File: File_Type) return Boolean; function Name (File: File_Type) return String; function Form (File: File_Type) return String; function Mode (File: File_Type) return File_Mode;

Wyjątki Status_Error próba skorzystania z pliku wewnętrznego który nie został otwarty lub otwarcia już otwartego pliku Mode_Error próba odczytu z pliku w trybie out lub append albo próba zapisu do pliku w trybie in Name_Error próba skojarzenia pliku wewnętrznego z plikiem zewnętrznym o niepoprawnej nazwie

Device_Error problem ze sprzętem, oprogramowaniem lub nośnikiem udostępniającym usługi wejścia/wyjścia Use_Error próba wykonania operacji wejścia/wyjścia na pliku dla którego jest to niedozwolone (np. ze względu na prawa dostępu w systemie operacyjnym) End_Error próba czytania danych za końcem pliku wejściowego

Data_Error dane wejściowe w formacie innym od oczekiwanego Layout_Error niepoprawne operacje formatowania w przypadku wyjścia tekstowego

wszystkie wymienione wyjątki zdefiniowane są w pakiecie Ada.IO_Exceptions, dołączanym (with) przez pakiet Ada.text_io

plik:file_type; nazwa: string(1..10); n:natural; begin... put( Podaj nazwe pliku: ); get_line(nazwa,n); begin Open(plik, out_file, nazwa(1..n)); exception when Name_Error => Create(plik, out_file, nazwa(1..n)); end;

Operacje wejścia/wyjścia dla plików tekstowych Plik tekstowy jest sekwencją stron (jednej lub więcej), zakończoną znakiem końca pliku. Każda strona jest sekwencją linii (jednej lub więcej), zakończoną znakiem końca strony Każda linia jest ciągiem znaków, zakończoną znakiem końca linii znaki końca zależą od implementacji

Można określić maksymalną długość linii i strony dla pliku wyjściowego (out) Znaki w linii, linie na stronie, strony w pliku są numerowane (zaczynając od 1) Pakiety zawierają typ całkowity Count o zakresie od 0 do pewnej maksymalnej wartości zależnej od implementacji. Numery znaków, linii, stron są typu Count. Pakiety definiują też podtyp Positive_Count typu Count (o zakresie od 1 do Count last).

Określenie bieżącej pozycji w pliku tekstowym: function Page (File: File_Type) return Positive_Count; function Line (File: File_Type) return Positive_Count; function Col (File: File_Type) return Positive_Count; Przykład: with ada.text_io, ada.integer_text_io; use ada.text_io, ada.integer_text_io; put( Biezaca linia: ); put( Integer(Line(plik)) );

Kontrolowanie struktury linii i stron w pliku wyjściowym (out): procedure Set_Line_Length (File: in File_Type; To: in Count); procedure Set_Page_Length (File: in File_Type; To: in Count); procedure New_Line (File: in File_Type; Spacing: in Positive_Count :=1 ); procedure New_Page (File: in File_Type); procedure Set_Col (File: in File_Type; To: in Count); procedure Set_Col (File: in File_Type; To: in Count);

Określenie bieżących ustawień maksymalnej długości linii / strony: function Line_Length (File: File_Type) return Count; function Page_Length (File: File_Type) return Count;

Kolumny, linie i strony w pliku wejściowym (in): procedure Skip_Line (File: in File_Type; Spacing: in Positive_Count:=1); procedure Skip_Page (File: in File_Type); Możemy korzystać z procedur Set_Line i Set_Col, ale ze względu na dostęp sekwencyjny można przesuwać się tylko w przód (tj. zwiększając numer linii / strony)

Sprawdzenie bieżącej pozycji w pliku: function End_of_Line (File: File_Type) return Boolean; function End_of_Page (File: File_Type) return Boolean; function End_of_File (File: File_Type) return Boolean;

Odczyt i zapis do pliku tekstowego procedure Get (File: in File_Type; Item: out Character); procedure Get (File: in File_Type; Item: out String); procedure Put (File: in File_Type; Item: in Character); procedure Put (File: in File_Type; Item: in String); procedure Get_Line (File: in File_Type; Item: out String; Last: out Natural); procedure Put_Line (File: in File_Type; Item: in String);

with ada.text_io; use ada.text_io; procedure odczyt_pliku is plik:file_type; nazwa: string(1..10); n:natural; linia:string(1..100); begin put("podaj nazwe pliku "); get_line(nazwa,n); open(plik,in_file,nazwa(1..n)); while not end_of_file(plik) loop get_line(plik,linia,n); put(linia(1..n));put_line("*"); end loop; end odczyt_pliku;

Pakiety ada.text_io i ada.wide_text_io posiadają pakiety potomne umożliwiające wprowadzanie i wyprowadzanie wartości należących do różnych typów skalarnych (np. typów całkowitych, zmienno- i stałoprzecinkowych) Można zatem odczytywać z plików tekstowych np. dane całkowite (integer), zmiennoprzecinkowe (float) itp. podobnie można odczytywać elementy typu wyliczeniowego

with ada.text_io, ada.integer_text_io; use ada.text_io, ada.integer_text_io; procedure pliki_int is plik:file_type; nazwa:string(1..10); suma:integer:=0; n:integer; begin put("podaj nazwe pliku "); get_line(nazwa,n); open(plik,in_file,nazwa(1..n)); while not end_of_file(plik) loop get(plik,n); put("odczytane: "); put(n); new_line; suma:=suma+n; end loop; put("suma liczb w pliku: "); put(suma); end pliki_int;

with ada.text_io; use ada.text_io; procedure pliki_dni is type dni_tyg is (pon, wt, sr, czw, pt, so, nie); package dni_io is new enumeration_io(dni_tyg); use dni_io; plik:file_type; nazwa:string(1..10); n:integer; d: dni_tyg; begin put("podaj nazwe pliku "); get_line(nazwa,n); open(plik,in_file,nazwa(1..n)); while not end_of_file(plik) loop get(plik,d); put("odczytane: "); put(d); new_line; end loop; end pliki_dni;