1 / 24

Wykład 2

Informatyka II MPZI2 sem.letni. Wykład 2. Obsługa plików. elementy. Pojęcie i istota stosowania. składowe takiego samego dowolnego typu - prostego, strukturalnego - nie pliki dostęp sekwencyjny - operacje np.: czytaj pierwszy | czytaj następny

hanh
Download Presentation

Wykład 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatyka II MPZI2 sem.letni Wykład 2

  2. Obsługa plików elementy Pojęcie i istota stosowania • składowe takiego samegodowolnego typu - prostego, strukturalnego - nie pliki • dostępsekwencyjny - operacje np.: • czytaj pierwszy | czytaj następny • zapisz na początku | zapisz na końcu • brak selektora (adresacji) • rozmiar dynamiczny • istnieje wewnętrzny wskaźnik elementu bieżącego, automatycznie modyfikowany po każdej operacji odczyt | zapis • fizycznie - w pamięci zewnętrznej: dysk, dyskietka, CD-ROM, - znakowe urządzenia wej/wyj: (monitor), drukarka

  3. Uwagi: • Po otwarciu do odczytu wskaźnik ustawia się na początku pliku,każdy odczyt lub zapis przesuwa wskaźnik o jedną pozycję. • Otwarcie nowego (nieistniejącego) pliku powoduje utworzenie pustego pliku, jeśli plik istniał jego zawartość zostaje usunięta, • Można sprawdzić czy wskaźnik jest na końcu pliku • Można przewinąć wskaźnik na początek – jeśli wtedy stwierdzimy, że jesteśmy na końcu pliku to plik jest pusty, • Zapis nowego elementu zalecany tylko na końcu pliku (w środku można ale zmienimy (nadpiszemy) wartość elementu). • Dopisanie „w środku” pliku wykonuje się przez etapowe przepisywanie do innego pliku.

  4. istotne cechy - gromadzenie dużej ilości informacji w sposób trwały - przenoszenie danych między programami | komputerami Dwa podstawowe typy plikowe textFile- plik tekstowy czyli file of string file ofTb -plik elementowy ( binarny, zdefiniowany ) o składowych typu Tb Wprowadza się tzw. zmienne plikowe służące do komunikowania programu z plikami fizycznymi • deklaracja: • var lista_nazw_zmiennych: Tp; • - Tp jest opisem typu plikowego lub nazwą typu • są to zmienne całościowe - reprezentują cały plik • nie ma zmiennych składowych - brak selektora elementu • są operacje dotyczące składowych pliku (procedury, funkcje), • korzystamy ze zmiennych odpowiadających składowym plików

  5. Przykłady deklaracji zmiennych plikowych: type osoba = record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; pensja: real end; dwa_napisy = array[1..2] of string[15]; //tablica var oceny: file ofreal; nazwiska: file ofstring[20]; zaloga: file ofosoba; adresy: file ofdwa_napisy; wyniki: textFile;

  6. Reguły obsługi plików • opis zmiennych plikowych type osoba = .....; • var f: file of osoba; • skojarzenie - f ’d:\ścieżka\plik’ • otwarcie pliku f do - zapisu • - odczytu • - dodawania (tylko tekstowe) • operacje - zapis | odczyt • zamknięcie pliku f • ew. usunięcie pliku f | zmiana położenia (nazwy) Kolejność operacji na plikach: !!! • skojarzenie zmiennej plikowej z plikiem fizycznym • otwarcie pliku (do zapisu/odczytu) • operacje (czytanie, zapis) • zamknięcie

  7. ..istnieje grupa standardowych procedur i funkcji, m.in. • procedura: assignFile( f, Wt ) - skojarzenie zmienna plikowa tekstowy opis położenia na dysku np.: assignFile( grupa, ' C:\ROK_II\grupa_1.bin ' ); • procedura : reset( f ) - otwarcie do odczytu /zapisu (zastępowanie) - jeśli plik istnieje!!! - plik staje się aktywny - wskaźnik na początku pliku - gdy plik nie istnieje  błąd wykonania • procedura : rewrite( f ) - otwarcie do zapisu - gdy plik nie istniał  jest tworzony - gdy plik istniał  jest zerowany - wskaźnik na początku pliku (końcu pustego)

  8. procedura: append( f ) - otwarcie do zapisu na końcu pliku (tylko tekstowego) • procedura : closeFile( f ) - zamknięcie pliku - dopisuje zawartość bufora do pliku, zwalnia go - powinno odbyć przed zakończeniem programu • funkcja: eof( f ) - badanie końca pliku (end of file) - wartość logiczna: true - wskaźnik po ostatniej wartości (na końcu) false - wskaźnik w środku Także operacje systemu plików – np procedura erase(plik) – usunięcie pliku

  9. odczyt z pliku • procedura : read( f, zmienna) f zmienna plikowa zmienna takiego samego typu jak element pliku zapis do pliku • procedura : write( f, zmienna ) Można korzystać z readln i writeln ale tylko dla zmiennych plikowych typu Textfile

  10. Przykład: zapis tekstu do nowego pliku tekstowego program test; var p1:TextFile; z:string; begin z:='Jakis dowolny tekst'; Assignfile(p1,'a.txt'); rewrite(p1); //otwarcie pliku do zapisu writeln(p1,z); //zapis do pliku CloseFile(p1); end. nazwa fizycznego pliku (wraz z ewentualną ścieżką dostępu)

  11. Przykład: zapis liczby do istniejącego pliku tekstowego program test; var p1:TextFile; z:real; begin z:=7.5; Assignfile(p1,'a.txt'); reset(p1); //otwarcie pliku do zapisu/odczytu writeln(p1,z:2:0); //wpisze do pliku 8 CloseFile(p1); end. nazwa fizycznego pliku (wraz z ewentualną ścieżką dostępu)

  12. Przykład: odczyt liczby z pliku tekstowego program test; var p1:TextFile; z:real; begin Assignfile(p1,'a.txt'); reset(p1); readln(p1,z); //czytanie z pliku do zmiennej CloseFile(p1); writeln(z:10:3); //wypisze 8.000 readln end.

  13. Jeśli więcej wierszy w pliku i nie wiemy ile, zwykle stosuje się konstrukcję program test; var p1:TextFile; z:real; begin Assignfile(p1,'a.txt'); reset(p1); while not eof(p1) do begin readln(p1,z); //czytanie z pliku do zmiennej writeln(z:10:3); //wpisze 8 end; CloseFile(p1); readln end. dopóki nie ma końca pliku wykonuj...

  14. Przykład: Zapis do nowego pliku elementowego program test; type osoba= record nazwisko:string[20]; wzrost:integer; end; var p1:file of osoba; z:osoba; begin Assignfile(p1,'spis.bin'); rewrite(p1); z.nazwisko:='Kowalski'; z.wzrost := 180; write(p1,z); //wpisanie elementu do pliku CloseFile(p1); readln end.

  15. Przykład: Zapis do istniejącego pliku elementowego program test; type osoba= record nazwisko:string[20]; wzrost:integer; end var p1:file of osoba;//zmienna plikowa z:osoba; //zmienna rekordowa begin Assignfile(p1,'spis.bin'); reset(p1); while not eof(p1) do read(p1,z); // czytanie do końca z.nazwisko:='Nowak'; z.wzrost := 190; write(p1,z); //wpisanie elementu do pliku CloseFile(p1); readln end.

  16. Przykład: Odczyt z pliku elementowego program test; type osoba= record nazwisko:string[20]; wzrost:integer; end var p1:file of osoba; z:osoba; begin Assignfile(p1,'spis.bin'); reset(p1); while not eof(p1) do begin read(p1,z); // czytanie elemetu writeln(z.nazwisko:20, z.wzrost:6); end; CloseFile(p1); readln end.

  17. Typ zbiorowy Typ zbiorowy to zbiór potęgowy danego typu porządkowego, czyli zbiór wszystkich podzbiorów tego typu. Zmienna typu zbiorowegomoże zatem zawierać zbiór pusty, jedno- lub wieloelementowy. Definicja typu zbiorowego: typenazwa_typu = set oftyp_porządkowy;  typ zbiorowy typ bazowy • Liczba elementów nie może przekraczać 256 – czyli typ bazowy może być: • typem Byte (podtyp liczb całkowitych – zakres 0 do 255), • okrojonym całkowitym, np. 1..56 • znakowym (w tym okrojonym np. 'a'..'z') • wyliczeniowym • logicznym • Zmienna typu zbiorowego zawierać może dowolny podzbiór elementów typu bazowego, od zbioru pustego do zbioru zawierającego wszystkie elementy.

  18. Czyli: Zmienna typu integer może mieć wartość 1 lub 100 a nie może jednocześnie 1 i 100! Zmienna typu wyliczeniowego może mieć jedną! z wyliczanych wartości Zmienna typu array może zawierać wiele wartości, ale zawsze ma statyczny rozmiar i nawet jak komórki są puste to rezerwują pamięć komputera Zmienna typu zbiorowego może zawierać zero, jedną lub wiele wartości z danego zbioru var zbior: set of1..100; Zmienne typu zbiorowego 1 5 7 19 4 8 34 67 69 88 100

  19. Przykłady definicji typu zbiorowego: type dni = set of (pon,wto,sro,czw,pia,sob,nie) ; znaki = set of 'a'..'z' ; miesiac = (sty,lut,mar,kwi,maj,cze,lip,sie,wrz,paz,lis,gru) ; zbior_miesiecy = set of miesiac ; var nazwa_miesiaca : miesiac ;//zmienna typu wyliczeniowego zbior_nazw : zbior_miesiecy ;//zmienna typu zbiorowego wybrane_dni:dni; UWAGA: nazwa_miesiaca może przyjąć wartość tylko jednej z nazw – typ wyliczeniowy; zbior_nazw może przyjąć wartość dowolnego podzbioru z nazw bazowych – typ zbiorowy w bloku wykonawczym można…. begin nazwa_miesiaca:= sty; zbior_nazw:= [sty, lut, mar];

  20. Zmiennych typu zbiorowego nie wolno używać w instrukcjach czytania i wyprowadzania wyników, używa się ich jedynie w operacjach wykonawczych, testujących itp. Operacje logiczne wykonywane na zbiorach to relacje (porównania): a = b równość zbiorów, te same elementy w obu zbiorach, a < > b różność zbiorów, różne elementy w obu zbiorach (chociaż niektóre mogą się powtarzać) a <= bzawieranie zbioru a w zbiorze b (true jeśli każdy element zbioru a jest w zbiorze b) a >= bzawieranie zbioru b w zbiorze a (true jeśli każdy element zbioru b jest w zbiorze a) cin a czy element c jest w zbiorze a

  21. Stałe typu zbiorowego Wartości stałych typu zbiorowego zapisujemy w nawiasach kwadratowych w postaciach: [lista wartości podzbioru] np. [1, 5, 7], [okrojenie ze zbioru] np. [1..3], lub łącznie: np. [1..3, 5, 7], [ ] – zbiór pusty

  22. Przykład 1: • type x=(alfa, beta, gamma, delta) ; {typ wyliczeniowy} • var z : set of x ; • begin • z := [alfa, beta] ; {lista - wybór podzbioru alfa, beta} • z := [alfa..gamma] ; {okrojenie - wybór podzbioru alfa, beta, gamma} • end;

  23. Przykład 2: type miesiace = set of 1..12 ; var v, x, y, z: miesiace ; lit: char ; begin x :=[1..12] ; {cały rok} y := [1..6] ; {pierwsze półrocze} z := [1, 3, 5 , 7 , 8, 10, 12] ; {miesiące mające 31 dni} lit := 'a' ; if x<>y then writeln('tak') else writeln('nie'); {tak} if x<=y then writeln('tak') else writeln('nie'); {nie} if x>=y then writeln('tak') else writeln('nie'); {tak} if x = y then writeln('tak') else writeln('nie'); {nie} if 1 in x then writeln('tak') else writeln('nie'); {tak} if 9 in z then writeln('tak') else writeln('nie'); {nie} if lit in ['a'..'z'] then writeln('tak') else writeln('nie');{tak} end ;

  24. Przykład 3: Czcionka var x: set of (italic, podgrubiony, podkreslony); Można: begin x:= []; x:= [italic,podkreslony]; x:= [italic,pogrubiony]; x:= [podkreslony]; …

More Related