S třední škola stavební Jihlava Sada 1 - Základy programování 16. Vstup a výstup do souboru Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2 - inovace a zkvalitnění výuky prostřednictvím ICT Jaromír Železný 2013 Projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky
Práce se soubory soubor se v jazyce Pascal skládá z posloupnosti složek stejného typu typ souboru musí být znám před vstupní/výstupní operací deklarace souboru musí být provedena před jeho prvním použitím. Soubory lze rozdělit do tří skupin: textové soubory soubory s udaným typem (typové soubory) soubory bez udaného typu (netypové soubory)
Práce se soubory proměnná typu soubor se deklaruje podobně jako ostatní proměnné v programu: var File1 : file of byte; { typové soubory } File2 : file of integer; File3 : text; { textový soubor } File4 : file; { netypový soubor }
Práce se soubory před použitím proměnné typu soubor v programu musíme přiřadit jméno vlastnímu souboru pomocí procedury Assign je-li proměnná přiřazena souboru, musí se otevřít, aby se připravila pro vstupní/výstupní operace se souborem pokud soubor již existuje, můžeme jej otevřít procedurou Reset nový soubor můžeme vytvořit a otevřít procedurou Rewrite soubor, který existuje, můžeme otevřít v režimu pouze pro zápis procedurou Append
Práce se soubory s textovým soubor, otevřeným procedurou Reset, může pracovat pouze v režimu pro čtení do textových souborů otevřených do textových souborů otevřených procedurami Rewrite a Append můžeme pouze zapisovat
procedura / funkce Význam Assign Append Close Read ReadLn Rename Reset Rewrite Write WriteLn Eof EoLn IOResult Práce se soubory Přiřadí jméno externího souboru proměnné typu soubor Otevře existující soubor pro vkládání Uzavře otevřený soubor Načte jednu nebo více hodnot ze souboru do jedné nebo více proměnných Totéž co Read, ale až po sekvenci CRLF (přečte celý řádek) Přejmenuje externí soubor Otevře existující soubor Vytvoří a otevře nový externí soubor Zapíše jednu nebo více hodnot do souboru Totéž co Write a zápis ukončí sekvencí CRLF (odřádkuje) Zjistí stav konce souboru Zjistí stav konce řádku v textovém souboru Vyhodnotí správnost vstupní/výstupní operace
Práce se soubory textový soubor Textový soubor je definován jako sekvence znaků v řádkovém formátu každý řádek je ukončen znakem konce řádku, po každý řádek je ukončen znakem konce řádku, po kterém může následovat znak posunu na další řádek (CRLF => carriage-return, line-feed)
Práce se soubory textový soubor vytvoření nového textového souboru se zápisem textu: program Vytvor_Textovy_Soubor; var F : text; Assign(F, I:\Text.txt ); { prirazeni nazvu } Rewrite(F); { otevreni } WriteLn(F, Zapisuji do souboru. ); { zapis } WriteLn(F, Konec. ); { zapis } Close(F); { uzavreni } end.
Práce se soubory textový soubor čtení ze souboru: program Nacti_Text; var F : text; { promenna typu textovy soubor} Line : string[255]; { pro ulozeni jednoho radku } I : integer; { citac jednotlivych radku } Assign(F, Text.txt ); { otevreni } Reset(F); { otevreni } I := 1; { nastaveni proměnné I na 1 } while not (Eof(F)) do { cyklus s podmínkou na začátku} { podmínkou je konec souboru (EOF)} ReadLn(F, Line); { cteni radku} WriteLn(I,, Line); { zobrazeni prectene informace } I := I+1; { zvýšení poř.cisla rádku } end; Close(F); { uzavreni souboru } end.
Práce se soubory- program upravte program tak, aby pracoval s textovým souborem použijte pevnou šířku sloupců dle vlastního uvážení Program PraceSeZaznamem; Type Osoba = Record Prijmeni:String; Jmeno:String; Telefon:LongInt; end; Var Clovek:Array[1..5] of Osoba; I:Integer; Begin Writeln('Zadavej postupne jmena a telefonni cisla'); For I:=1 to 5 do Begin Writeln('Polozka c.', I); Write(' Zadej prijmeni ');Readln(Clovek[I].Prijmeni); Write(' Zadej jmeno ');Readln(Clovek[I].Jmeno); Write(' Zadej telefon ');Readln(Clovek[I].Telefon); Writeln; End; Writeln; Writeln('Vypis tefonniho seznamu:'); For I:=1 to 5 do Begin Write(I,'. ',Clovek[I].Prijmeni); Write(' ',Clovek[I].Jmeno); Writeln(' ',Clovek[I].Telefon); End; Readln; End.
Práce se soubory typový soubor v typových souborech je znám typ složky složku typového souboru může tvořit libovolný jednoduchý (standardní), nebo strukturovaný (uživatelský) typ
Práce se soubory - typový soubor program Knihovna; type kniha = record Nazev : string[60]; Autor : string[20]; Rok : word; Nakladatel : string[10]; end; var F : file of kniha; Zaznam : kniha; I : integer;
Práce se soubory typový soubor procedure MakeFile; end; Assign(F, Knihovna.dbf ); Rewrite(F); if IOResult <> 0 then Halt; {Halt = stop - ukončí běh programu}
Práce se soubory typový soubor procedure ReadRecordKbd; with Zaznam do Write ( Nazev knihy : ); Readln(Nazev); Write ( Autor : ); Readln(Autor); Write ( Rok vydani : ); Readln(Rok); Write ( Vydavatel : ); Readln(Nakladatel); end; end;
Práce se soubory typový soubor end. MakeFile; I := 1; while I <= 10 do; ReadRecordKbd; Write(F, Zaznam); if IOResult = 0 then end; Close(F); else I := I+1 Close(F); Halt; end;
Práce se soubory typový soubor program vytvoří nový typový soubor, v němž je každá položka datového typu záznam, který je nadeklarováns názvem Kniha procedura MakeFilevytvoří na disku nový soubor a otevře jej pro zápis. Nejde-li soubor otevřít, běh programu se zastaví procedura ReadRecordKbdumožňuje zadání každé jednotlivé složky souboru z klávesnice v cyklus whilese počítají vložené záznamy a přestane se provádět po vložení desátého záznamu po vložení každého záznamu do souboru se provádí test správnosti V/V operace pokud dojde při zápisu k chybě, soubor se uzavře a program skončí
Práce se soubory bez udaného typu soubory bez udaného typu se používají pro přístup k libovolnému diskovému souboru bez ohledu na jeho typ a jeho strukturu soubor bez uvedeného typu se deklaruje: Var UnTypedFile : file; při jejich otevírání lze definovat délku záznamu, pokud definici neprovedeme, nastaví se výchozí délka záznamu 128 byte
Práce se soubory bez udaného typu délku záznamu lze definovat jako druhý parametr procedur Reset nebo Rewrite: Reset(UnTypedFile, 256); Rewrite(UnTypedFile, 256); jsou pro ně přístupné všechny standardní procedury a funkce kromě Reada Write, místo nich se k rychlému přenosu dat používají speciální procedury BlockRead a BlockWrite, které pracují s definovaným záznamem, jehož velikost byla určena při otevření souboru
Práce se soubory bez udaného typu využívá se například pro zjištění existence souboru libovolného typu na disku: Type S : string[80]; function FileExist(Name : S) : boolean; Var F : file; Assign(F, Name); Reset(F); if IOResult = 0 then Close(F); FileExist := True; end else FileExist := False; end;
Práce se soubory bez udaného typu test existence se provádí otevřením souboru a následnou kontrolou správnosti V/V operace pokud byl soubor otevřen, funkce IOResult vrací nulovou hodnotu, a proto funkce FileExistbude vracet hodnotu True, v opačném případě vrací hodnotu False
Zdroje: TurboPascal 6.0 - příručka uživatele (help) Literatura: Radek HYLMAR: Programování pro úplné začátečníky, Computer Press, Brno, 2009, ISBN 978-80-251-2129-0 Januš DRÓZD, Rudolf KRYL: Začínáme s programováním, GRADA a.s., Praha, 1992, ISBN 80-85424-41-X Tomáš HRUŠKA: Pascal pro začátečníky, SNTL, Praha 1989, ISBN 80-03-00345-8 Materiál je určen k bezplatnému používání pro potřeby výuky a vzdělávání na všech typech škol a školských zařízení. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je : Jaromír Železný Pokud není uvedeno jinak, byly při tvorbě použity volně přístupné internetové zdroje. Autor souhlasí se sdílením vytvořených materiálů a jejich umístěním na www.ssstavji.cz.