180 likes | 385 Views
Pliki. Pliki. Pliki jako pamięć nieulotna Nazwy, atrybuty i prawa dostępu atrybuty uprawnienia w systemach wieloużytkowych. Pliki. Plik dla systemu operacyjnego nie ma określonego typu (amorficzny)
E N D
Pliki • Pliki jako pamięć nieulotna • Nazwy, atrybuty i prawa dostępu • atrybuty • uprawnienia w systemach wieloużytkowych
Pliki • Plik dla systemu operacyjnego • nie ma określonego typu (amorficzny) • nazwa, rozszerzenie nazwy lub położenie może być podstawą do wnioskowania co do typu danych w pliku • Plik jako obiekt w programie • elementowe, • tekstowe, • blokowe (amorficzne).
Pliki – podstawowe operacje • deklaracja zmiennej typu plikowego, • związanie z tą zmienną nazwy pliku, • otworzenie pliku do zapisu lub odczytu, • odczyt lub/i zapis (również wielokrotny), • zamknięcie pliku. • Zmienna plikowa po zamknięciu pliku może zostać ponownie wykorzystania do obsługi innego pliku. W standardowym języku Pascal obsługa plików wygląda nieco inaczej, jednak tu zajmiemy się wyłącznie implementacją Turbo Pascal.
Pliki elementowe type typ_plikowy = file of typ_elementów; • Przykłady deklaracji typów plikowych: type Person = record FirstName: string[15]; LastName : string[25]; Address : string[35]; end; PersonFile = file of Person; NumberFile = file of Integer; SwapFile = file;{ nie określono typu elementów }
var f:file of real; x,y:real; begin assign(f,'dane.rrr'); rewrite(f);{w C/C++ jedna operacja kojarzy nazwę } {z plikiem i otwiera plik} x:=5.3; y:=74.5; write(f,x); write(f,x,y); { writeln(f,x); <<< invalid file type } close(f);
reset(f); writeln(filesize(f)); { liczba elementow w pliku: 3 } while not(eof(f)) do begin read(f,x); writeln(x:5:2); { 5.30 5.30 74.50 } end; writeln(filepos(f)); { 3 } seek(f,filepos(f)-1); read(f,y); writeln(y:5:2); { 74.50 } close(f); end.
Pliki tekstowe var f : Text;{ to już znamy, tego typu jest standardowe we. i wy.} i, j : Integer; begin Assign(f,'TEST.TXT'); Rewrite(f); Writeln(f,'1 2 3 4 '); Writeln(f,'5 6 7 8 ');{ plik zawiera 2 wiersze po 4 cyfry po kazdej spacja } Reset(f); while not SeekEof(f) do{SeekEof(f) zwraca TRUE jeżeli osiągnięto} begin{ koniec pliku f } if SeekEoln(f) then{SeekEoln(f) analogicznie koniec wiersza } Readln; { Go to next line } Read(f,j); Writeln(j); end; end.
Pliki elementowe a tekstowe • Tekstowe • czytelność • przenośność (końce linii DOS/Win --- UNIX) • uniwersalnośc (różne typy elementy) • Elementowe • szybkość • łatwość przeszukiwania • oszczędność pamięci • ograniczenie do jednego typu elementow na plik
Plik blokowy – ciąg bajtów program CopyFile; var FromF, ToF: file; NumRead, NumWritten: Word; Buf: array[1..2048] of Char; begin Assign(FromF, ParamStr(1)); { plik we. } Reset(FromF, 1);{ rozmiar elementu = 1 Bajt } Assign(ToF, ParamStr(2)); { plik we. } Rewrite(ToF, 1); Writeln('Copying ', FileSize(FromF), ' bytes...'); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); Close(FromF); Close(ToF); end.
Moduły w Pascalu • cel programowania modularnego • realizacja w Pascalu • unit, • interface, • implementation, • uses
unit nazwa; interface { deklaracje procedur, funkcji, typów, zmiennych, } { stałych … – eksportowanych przez moduł } implementation { deklaracje procedur, funkcji … – wewnętrznych modułu } { definicje nazw zadeklarowanech w części interface} begin { inicjalizacja modułu } end.{ kropka kończy moduł }
unit gzolw; interface var XTur, YTur, TAngle: real; procedure forwd(d:real); procedure TurnLeft(f:real); { f-kąt w stopniach } procedure TurnRight(f:real); procedure PenUp; procedure PenDown; function CheckPen: boolean; implementation …
implementation uses Graph; var PenState: boolean; { lokalna zmienna modułu } procedure forwd(d:real); var x2,y2:real; begin x2:=XTur+d*cos(TAngle); y2:=YTur-d*sin(TAngle); if PenState then Line(round(XTur),round(YTur),round(x2),round(y2)); XTur:=x2; YTur:=y2; end; …
procedure TurnLeft(f:real); { f w stopniach } begin TAngle := Tangle + f*Pi/180; while TAngle>2*Pi do TAngle:=TAngle-2*Pi; while TAngle<0 do TAngle:=TAngle+2*Pi; end; procedure TurnRight(f:real); begin TurnLeft(-f); end; procedure PenUp; begin PenState:=false; end; …
procedure PenDown; begin PenState:=true; end; function CheckPen: boolean; begin CheckPen:=PenState; end; begin{ inicjalizacja } XTur:=0; YTur:=0; TAngle:=0; end.
Moduły • moduły i co dalej? • programowanie obiektowe • programowanie składnikowe • …