Сторінка
4

Паскаль: робота з файлами

program OutPutGroup;

uses Crt, Dos; { Підключення модулів Crt та Dos }

type Student = record Sname, Name : string[20]; Ball : real;

end;

var Fi : file of Student;

FileName: string; { Змінна для введення імені файла }

procedure OpenFile;

var Rez : Integer; Ch : char;

begin

Rez:=1;

while Rez <> 0 do { Rez=0 – ознака того, що введено} {правильне зовнішнє ім’я файла}

begin

writeln('Задайте ім''я файла'); readln(FileName);

assign(Fi, FileName);

{$I-} {Вимкнення контролю правильності читання/запису}

reset(Fi);

{$I+} { Увімкнення контролю }

Rez:=IOResult;

if Rez <> 0 then

begin

writeln('Перевірте правільность імені файла !');

writeln('Чи буде повторне задання імені? "Y"/"N":');

readln(Ch);

if (Ch = 'n') or (Ch = 'N') then halt(0);{Вихід із програми}

end;

end;

end;

procedure OutPutFile;

var St : Student; Ch : char;

begin

writeLn('Чи бажаєте дивитися дані про студентів ? "Y"/"N" ');

readln(Ch);

if (Ch = 'Y') or (Ch = 'y') then

begin

while not eof(Fi) do

begin

read(Fi, St); clrscr;

writeln('Прізвище : ', St.SName);

writeln('Ім''я: ', St.Name);

writeln('Середній бал: ', St.Ball);

readln;

end;

end;

close(Fi);

end;

begin clrscr; writeln('Програма друкування даних про студентів');

openfile; outPutfile;

end. Задачі 1.* Пояснити, що задає та як використовується пpогpама program filcrout; type Tel = record nam : string; num : integer end; var f : file of Tel; x : Tel; s : string; eel : boolean; procedure readel ( var x : Tel ); begin x.num:=0; readln ( x.nam);

if x.nam <> '' then readln ( x.num )

end; begin writeln ( 'Введіть ім''я файла:' ); readln ( s ); assign ( f, s ); rewrite ( f ); repeat readel ( x ); eel := (x.nam = ''); if not eel then write ( f, x ); until eel; reset(f); while not eof ( f ) do begin

read ( f, x ); writeln ( x.num, ': ', x.nam ) end end. 2.* Переписати програму з прикладу 13.2, щоб у разі порожнього файла її виконання не завершувалося аварійно. 3. Переписати програму з прикладу 13.2, щоб числа не копіювалися в інший файл, а друкувалися на екрані. 4.* Написати пpоцедуpу пpисвоювання файлів шляхом копіювання. 5.* Написати функцію пеpевіpки побайтової pівності двох файлів. 6.* Написати пpоцедуpу дописування до елементів пеpшого файла елементів другого, із зберіганням pезультату а) в новому файлі; б) в першому файлі. 7.* Написати пpоцедуpу виведення змісту файла з даними про студентів на екpан "стоpінками": після друкування на екрані даних про чергових 5 студентів виводиться запит щодо продовження, і виконання програми призупиняється до того, як користувач підтвеpдить або не підтвердить пpодовження.

4. Прямий доступ у системі Турбо Паскаль Як ми побачили в трьох попередніх підрозділах, доступність елемента файла, тобто можливість його читання чи створення в ході виконання програми, залежить від його розташування в послідовності. Досі ми розглядали підпрограми послідовногодоступу до елементів файла. Він полягає в тім, що елементи файла не задаються явно, а доступність їх у ході виконання програми цілком визначається їх розташуванням у послідовності. Спочатку доступний перший елемент, після його обробки – другий тощо. Але послідовний доступ елементів не завжди зручний. Чи не замислювався читач над тим, як запрограмувати читання з типізованого файла елемента за його номером або його заміну, додавання чи вилучення ? Зрозуміло, що задати читання елемента за номером k можна так:

reset(f);

for i:=1 to k-1 do read(f, x); {пропущено k-1 елемент – доступний k-й}

read(f, x). Для заміни елемента файла за його номером k можна "вийти на нього" шляхом читання попередніх. Далі можна скористатися одним недоліком системи Турбо Паскаль. Справа в тім, що система дозволяє в стані читання записувати в файл значення змінних (і лише змінних!). Отже, заміну елемента можна описати так:

reset(f);

for i:=1 to k-1 do read(f, x);

{пропущено k-1 елемент - доступний якраз k-й}

x:= .; write(f, x). Описати в такому ж дусі вилучення й додавання елемента до файла ми залишаємо вправою для наддопитливих читачів. Але все це "штучки", якими користуватися не варто. Натомість розглянемо прямийдоступ до елементів файла. Його суть у тім, що елементи задаються номерами в послідовності, яка утворює файл. Такий доступ здійснюється за допомогою спеціальних підпрограм. Основною є процедура SEEK. У її виклику задається ім’ я файлової змінної та номер того елемента файла, який стає доступним після виконання виклику. Номер задається виразом типу LongInt. Наприклад, після виклику Seek ( f, 2) доступним стає третій елемент, оскільки нумерація починається з 0:

f0

f1

f2

f3

.

fN

­ Значення саме цього елемента буде читатися за виконання виклику процедури введення read чи цьому елементу буде щось присвоюватися за виконання write. В обох випадках доступним стане наступний елемент:

f0

f1

f2

f3

.

fN

Перейти на сторінку номер:
 1  2  3  4  5  6 


Інші реферати на тему «Інформатика»: