Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.

Podobné prezentace


Prezentace na téma: "Programování v Pascalu Přednáška 9 RNDr. Hana Havelková."— Transkript prezentace:

1 Programování v Pascalu Přednáška 9 RNDr. Hana Havelková

2 Typ soubor Druhy souborů Deklarace Základní operace se soubory Textové soubory Typové soubory Netypové soubory Chyby

3 Druhy souborů textový soubor typový soubor netypový soubor

4 Základní operace se souborem přiřazení - spojení logického a fyzického jména souboru otevření souboru čtení dat zápis dat uzavření souboru přidávání dat zkrácení souboru

5 Přístup sekvenční data se čtou postupně od začátku data lze přidávat na konec souboru není možné již zapsané údaje rovnou změnit přímý je možné přímo číst daná data je možné přímo přepsat daná data) je možné přidávat data na konec souboru i jinam (dojde pak k přepsání již zapsaných dat)

6 Deklarace souboru textový soubor filetypof typový soubor netypový soubor textfile

7 Přiřazení před otevřením je nutno propojit fyzické a logické jméno souboru pomocí procedury Assign Assign (log_jmeno, fyz_jmeno) log_jmenoidentifikátor souboru uvedený ve var fyz_jmenořetězcový výraz – skutečné jméno souboru var vstup : text; vystup : file of integer; begin Assign (vstup, 'd:\data\seznam.txt'); Assign (vystup, 'c:\temp\cisla.dat'); …

8 Otevření souboru otevření (vytvoření) nového souboru nebo přepsání již existujícího pomocí procedury Rewrite – otevření pro zápis Rewrite (log_jmeno_souboru) otevření existujícího souboru pro čtení procedurou Reset Reset (log_jmeno_souboru) otevření existujícího textového souboru pro přidávání na konec procedurou Append Append (log_jmeno_souboru)

9 Chyby při otevření – soubor nejde otevřít zařízení není připraveno soubor, ze kterého chceme číst, neexistuje nemáme dostatečná práva k souboru soubor, do kterého chceme zapisovat (přidávat), neexistuje fyzická chyba zařízení

10 Zavření souboru procedura Close po ukončení práce se souborem je vhodné soubor uzavřít – jinak by se mohlo stát, že při bufferovaných operacích se posledně zapisovaná data se nepřepíšou z vyrovnávací paměti (bufferu) Close (log_jmeno_souboru)

11 Zápis do textového souboru procedura Write – zapíše položky uvedené v seznamu do souboru Write (log_jmeno_souboru, seznam položek) procedura WriteLn – zapíše položky uvedené v seznamu do souboru včetně znaku konec řádku WriteLn (log_jmeno_souboru, seznam položek) WriteLn (vystup, 'Seznam jmen'); Write (vystup, '1. '); WriteLn (vystup, 'Adamec Josef'); Write (vystup, '2. '); WriteLn (vystup, 'Bláhová Eva'); …

12 Čtení z textového souboru procedura Read – přečte údaje ze souboru do položek uvedených v seznamu Read (log_jmeno_souboru, seznam položek) procedura ReadLn – přečte údaje ze souboru včetně znaku konec řádku do položek uvedených v seznamu ReadLn (log_jmeno_souboru, seznam položek) var nadpis, jmeno : string [30]; cislo : string [3]; …. ReadLn (vstup, nadpis); Read (vstup, cislo); ReadLn (vstup, jmeno); ….

13 Kontrola (test) konce souboru při čtení je nutno kontrolovat, zda nebylo dosaženo konce souboru – specielní znak EOF – end of file testování provedeme funkcí Eof Eof (log_jmeno_souboru) čteme-li za koncem souboru, dojde k chybě

14 Funkce a procedury pro práci s text. souborem funkce Eof (log_jmeno) vrací true, je-li akt. pozice na konci souboru EoLn (log_jmeno) vrací true, je-li akt. pozice na konci řádku SeekEof (log_jmeno) stejné jako Eof, ale přeskakuje prázdné znaky SeekEoln (log_jmeno) stejné jako EoLn, ale přeskakuje prázdné znaky procedury Append (log_jmeno) otevření souboru na přidávání Assign (log_jmeno, fyz_jmeno)přiřazení skutečného jména souboru log. jménu (proměnné typu text) Flush (log_jmeno) vyprázdnění bufferu do souboru Rewrite (log_jmeno) otevření souboru pro založení Reset (log_jmeno) otevření souboru pro čtení Read, ReadLn (log_jmeno, …) čtení ze souboru Write, WriteLn (log_jmeno, …) zápis do souboru

15 Založení textového souboru (1) { textovy soubor zaku obsahujici na kazdem radku } { cis, jmeno, prumer zaka } {soubor SEZNAM.TXT } uses Crt; var soubor: text; jm : string [20]; pr : real; cis, i : integer;

16 Založení textového souboru (2) begin Assign (soubor, 'seznam.txt'); Rewrite (soubor); ClrScr; Write ('zadej cislo '); Readln(cis); while cis <> 0 do begin Write ('Jmeno : '); ReadLn (jm); Write ('Prumer : '); ReadLn (pr); { doplneni jmena na delku 20 znaku} for i:=1 to 20 – length (jm) do jm:=jm+' '; WriteLn (soubor, cis, ' ', jm, pr); {zapis do souboru} Write ('Cislo : '); ReadLn (cis); end; Close (soubor); end.

17 Kontrolní výpis textového souboru {načtení po jednotlivých položkách v řádcích} var soubor: text; jmeno : string [20]; pr : real; cis : integer; begin Assign (soubor, 'seznam.txt'); Reset (soubor); while not eof (soubor) do begin Read (soubor, cis); Read (soubor, jmeno); ReadLn (soubor, pr); WriteLn (cis:2, jmeno, pr :6 :2); end; Close (soubor); end.

18 Výpis libovolného textového souboru program VypisSoubor; var soubor : text; radek, jmeno : string; begin Write('Zadej jmeno souboru: '); ReadLn(jmeno); Assign(soubor, jmeno); {$I-} Reset(soubor); {$I+} if IOResult <> 0 then begin WriteLn ('Soubor neexistuje nebo nejde otevrit!'); ReadLn; exit; end; while not eof (soubor) do begin ReadLn (soubor, radek); WriteLn (radek); end; WriteLn(#10'Konec souboru'); ReadLn; end.

19 Statistika souboru (1) { určení počtu řádků, slov a znaků } program StatistikaSouboru; function JeMezera(z : char) : boolean; begin if (ord(z) <= 32) or (z in [',', '.', ';', '"', ':']) then JeMezera := true else JeMezera := false; end; var soubor : text; jmeno : string; predchozi, nasledujici : char; znaky, slova, radky : integer;

20 Statistika souboru (2) begin {Write('Zadej jmeno souboru: ');ReadLn(jmeno);} jmeno := 'h:\vstup.txt'; Assign (soubor, jmeno); {$I-} Reset (soubor); {$I+} if IOResult <> 0 then begin WriteLn ('Soubor neexistuje nebo nejde otevrit!'); ReadLn; exit; end; nasledujici := ' '; radky := 0; slova := 0; znaky := 0;

21 Statistika souboru (3) while not eof (soubor) do begin predchozi := nasledujici ; Read(soubor, nasledujici); Inc(znaky); if nasledujici = #13 then begin {znaky CR a LF ukončují řádek} predchozi := nasledujici ;{#13 a #10} Read (soubor, nasledujici); Inc (radky);Dec(znaky); end; if JeMezera(predchozi) and not (jeMezera(nasledujici)) then Inc(slova); end; if predchozi = #13 then Inc(radky); if pocet > 0 then Inc (radky); WriteLn ('Pocet radku ', radky); WriteLn ('Pocet slov ', slova); WriteLn ('Pocet znaku ', znaky); ReadLn; end.

22 Typový soubor umožňuje sekvenční přístup přímý přístup zjištění počtu položek čtení i zápis najednou – není nutno otvírat soubor zvlášť pro čtení a zvlášť pro zápis

23 Funkce a procedury pro práci s typovým souborem funkce Eof (log_jmeno) vrací true, je-li akt. pozice na konci souboru FileSize (log_jmeno) vrací velikost souboru (počet položek) FilePos (log_jmeno) vrací pozici v souboru (0 je začátek, FileSize je konec) Seek (log_jmeno, pozice) nastavení pozice v souboru procedury Assign (log_jmeno, fyz_jmeno)přiřazení skutečného jména souboru log. jménu (proměnné typu file of typ) Rewrite (log_jmeno) otevření souboru pro založení Reset (log_jmeno) otevření existujícího souboru pro čtení i zápis Read (log_jmeno, …) čtení ze souboru Trunc (log_jmeno) zkrácení souboru od akt. pozice do konce Write (log_jmeno, …) zápis do souboru

24 Přepsání souboru VSTUP.TXT do VSTUP.DAT type TZak :record cis: integer; jmeno : string [20]; pr : real; end; var vstup: text; zaznam: TZak; vystup: file of TZAK; begin Assign (vstup, 'seznam.txt'); Reset (vstup); Assign (vystup, 'seznam.dat'); Rewrite (vystup); while not eof (vstup) do begin Read (vstup, zaznam.cis); Read (vstup, zaznam.jmeno); ReadLn (vstup, zaznam.pr); Write (vystup, zaznam); end; Close (vstup); Close (vystup); end.

25 Menu pro práci se souborem – deklarace program Soubory; uses Crt; type TZaznam = record jmeno : string [10]; prijmeni : string [15]; email : string; mobil : string [10]; end; var F : file of TZaznam; Zaznam : TZaznam; Soubor : boolean; volba : char;

26 Menu pro práci se souborem – zápis procedure Zapis; begin ClrScr; with Zaznam do begin write ('Zadej jmeno : '); readln (jmeno); while jmeno <> '' do begin write ('Prijmeni : '); readln (prijmeni); write ('Email : '); readln (email); write ('Mobil : '); readln (mobil); write (F,Zaznam); write ('Zadej jmeno : '); readln (jmeno); end;

27 Menu pro práci se souborem – založení procedure Zalozeni; var JmenoSouboru : string; begin if Soubor then begin Close (F); Soubor:= false; end; ClrScr; write ('Zadejte jmeno souboru : '); Readln(JmenoSouboru); Assign (F,JmenoSouboru); {$I-} Rewrite(F); {$I+} if IOResult<>0 then begin TextColor(red); writeln ('Soubor se nepodarilo zalozit'); writeln ('Zkuste zalozit jiny soubor'); Readkey; TextColor (white); end else begin Soubor := true; Zapis; end; end;

28 Menu pro práci se souborem – přidání, výpis procedure Pridani; begin Seek (F, FileSize(F)); Zapis; end; procedure Vypis; begin ClrScr; writeln ('Kontrolni vypis souboru'); Seek(F, 0); with Zaznam do begin while not eof (F) do begin read (F, Zaznam); write (prijmeni, ' ' : 16- length (prijmeni)); write (jmeno, ' ' : 11 – length (jmeno)); writeln (mobil, ' ', email); end; ReadKey end;

29 Menu pro práci se souborem – funkce Menu function Menu : char; var volba : char; begin ClrScr; GotoXY(20,1); writeln('***********************************'); GotoXY(20,2); writeln('* PRACE SE SOUBOREM ł'); GotoXY(20,3); writeln('***********************************'); GotoXY(20,4); writeln('* Zalozeni souboru............ 1 *'); GotoXY(20,5); writeln('* Vyber souboru............... 2 *'); GotoXY(20,6); writeln('* Vypis souboru............... 3 *'); GotoXY(20,7); writeln('* Pridani zaznamu do souboru.. 4 *'); GotoXY(20,8); writeln('* Vyhledani zaznamu........... 5 *'); GotoXY(20,9); writeln('* Konec prace................. 6 *'); GotoXY(20,10); writeln('***********************************'); GotoXY(20,11); writeln('Stisknete klavesu podle Vasi volby:'); GotoXY(37,12); Menu := ReadKey; end;

30 Hlavní program {HLAVNI PROGRAM} begin Soubor := false; repeat volba := Menu; case volba of '1': Zalozeni; '2': Vyber; '3': if Soubor then Vypis else Chyba; '4': if Soubor then Pridani else Chyba; '5': if Soubor then Hledani else Chyba; '6': Konec; end; until volba='6'; end.

31 Netypový soubor není uveden typ základní jednotka, s níž se pracuje, je tzv. blok je možné číst či zapisovat po jednotlivých bytech po blocích dané velikosti po několika blocích

32 Funkce a procedury pro práci s netypovým souborem funkce Eof (log_jmeno) vrací true, je-li akt. pozice na konci souboru FileSize (log_jmeno) vrací velikost souboru (počet položek) FilePos (log_jmeno) vrací pozici v souboru (0 je začátek, FileSize je konec) Seek (log_jmeno, pozice) nastavení pozice v souboru procedury Assign (log_jmeno, fyz_jmeno)přiřazení skutečného jména souboru log. jménu (proměnné typu file of typ) Rewrite (log_jmeno [, delka]) otevření souboru pro založení (delka bloku) Reset (log_jmeno [, delka]) otevření existujícího souboru (impl. 128) BlockRead (log_jm, pamět, počet [,vysledek]) čtení ze souboru Trunc (log_jmeno) zkrácení souboru od akt. pozice do konce BlockWrite (log_jm, pamět, počet [,vysledek]) zápis do souboru

33 Kopírování souboru (1) program CopyFile; {program volame jako : CopyFile zdroj cil} var Odkud, Kam: file; Precteno, Zapsano: Word; Pamet: array [1..2048] of Char; begin if ParamCount < 2 then begin WriteLn ('Malo parametru'); ReadLn; exit; end;

34 Kopírování souboru (2) Assign (Odkud, ParamStr(1)); Reset (Odkud, 1); Assign (Kam, ParamStr(2)); Rewrite (Kam, 1); WriteLn ( 'Kopiruje se ', FileSize (Odkud), ' bytu...'); repeat BlockRead (Odkud, Pamet, SizeOf(Pamet), Precteno); BlockWrite (Kam, Pamet, Precteno, Zapsano); until (Precteno = 0) or (Zapsano <> Precteno); Close (Odkud); Close (Kam); WriteLn ('Hotovo'); ReadLn; end.


Stáhnout ppt "Programování v Pascalu Přednáška 9 RNDr. Hana Havelková."

Podobné prezentace


Reklamy Google