Data v počítači je záhodno ukládat na vhodné médium. Takovým médiem bývá zpravidla disketa nebo pevný disk, kam se data ukládají do souborů. V Pascalu je definován typ soubor:
VarF: File of typ;
Se souborem se pracuje vcelku snadno. Jen je potřeba si uvědomit, že proměnná typu soubor a skutečný soubor na disku jsou dvě různé věci. Na počátku spolu vůbec nesouvisí. Proto musíme přidělit proměnnou ke skutečnému souboru:
Assign( proměnná, jméno_souboru );
Potom už pracujeme s proměnnou soubor a tím i se souborem na disku.
Rewrite( soubor );
Vytvoří nový (prázdný) soubor. Do něj pak lze zapisovat.
Reset( soubor );
Otevře soubor pro čtení i zápis. Ze souboru lze číst i do něj zapisovat.
Close( soubor );
Uzavře soubor. Pak do něj nelze zapisovat, ani z něj číst.
Read( soubor, data );
Čtení ze souboru. Data se načtou do proměnné data.
Write( soubor, data );
Zápis do souboru. Obsah proměnné data se uloží do souboru.
Var
F: File of Integer;
Begin
Assign( F, 'G:\Test.Dat');
Rewrite( F );
Write( F, i );
Reset( F );
Read( F, i );
Close( F );
End;
Program Dotaznik; Uses Crt, DOS; Type Osoba = Record Jmeno : String[31]; Prijmeni: String[31]; RodneCis: String[11]; { RRMMDD/nnnn } Adresa : Array[1..3]of String[63]; Telefon : String[31]; Vek : Byte; Pohlavi : Char; end; Var Nekdo : Osoba; JmSoub: String; { Jméno souboru } Volba : Integer; { Volba v menu } Cislo : Integer; { Číslo záznamu } {---------------------------------------------------} Procedure WriteXY( X, Y: Byte; S: String ); Function Stari( RC: String ): Integer; Procedure Form; Procedure Nacti( var Kdo: Osoba ); Procedure Vokaz( var Kdo: Osoba );
Procedure ZeSoub(Jm:String;Cis:Integer;Var Kdo:Osoba); Var F: File of Osoba; Begin Assign( F, Jm ); { Soubor F má jméno Jm } Reset( F ); { Otevření souboru } While (Cis>0 )and not EOF( F ) do Begin {Dokud jsem nenačetl všechny a není konec souboru...} Read( F, Kdo ); { Načti ze souboru F data do Kdo } Cis:= Cis-1; { a zmenši počet k načtení } end; Close( F ); { Zavření souboru } Vokaz( Kdo ); { Co je načteno, ukázat } End; Procedure PridejDoSoub( Jm: String; Var Kdo: Osoba ); Var F : File of Osoba; Pom: Osoba; Begin Assign( F, Jm ); { Soubor F má jméno Jm } Reset( F ); { Otevření souboru } While not EOF( F ) do Begin { Dokud není konec souboru...} Read( F, Pom ); { Načti ze souboru F data do Pom } end; Write( F, Kdo ); { Ulož do souboru } Close( F ); { Zavření souboru } Vokaz( Kdo ); { Co je načteno, ukázat } End; Procedure NovySoub; {Zadání jména souboru } Var F: File; Begin Write( 'Jméno souboru: ' ); WriteLn( JmSoub ); Write( ' Nové jméno: ' ); Readln( JmSoub ); Assign( F, JmSoub ); { Soubor F má jméno JmSoub } Rewrite( F ); { Přepiš soubor } Close( F ); { Uzavři soubor } End; Function Menu: Integer; Var Volba: Integer; Begin WriteLn( '[1] Nové jméno' ); WriteLn( '[2] Dalsí jméno' ); WriteLn( '[3] Predchozí jméno' ); WriteLn( '[4] Novy soubor' ); WriteLn( '[0] KONEC'); Readln( Volba ); Menu:= Volba; End; {---------------------------------------------------} Begin ClrScr; JmSoub:= 'Pas_09.Dat'; Cislo:= 0; Repeat Volba:= Menu; Case Volba of 1: Begin Nacti( Nekdo ); PridejDoSoub( JmSoub, Nekdo ); end; 2: Begin Cislo:= Cislo+1; ZeSoub( JmSoub, Cislo, Nekdo ); end; 3: Begin If Cislo>1 then Cislo:= Cislo-1; ZeSoub( JmSoub, Cislo, Nekdo ); end; 4: NovySoub; end; Until Volba=0; End.
Tento příklad se zdá poněkud dlouhý. Budiž ctěnému publiku útěchou, že nemám žádných doplňujících úkolů.
|
|