.

Послідовне читання типізованих файлів (реферат)

Язык: украинский
Формат: реферат
Тип документа: Word Doc
0 1216
Скачать документ

Реферат на тему:

Послідовне читання типізованих файлів

Для того, щоб читати вже створений типізований файл, треба відкрити
його для читання викликом процедури RESET(f). Після її виклику файлова
змінна установлюється в початковий стан для читання, а номером
доступного елемента стає 0 незалежно від того, чи є взагалі елементи в
файлі. Значення f можна подати як (F, 0, R), тобто

F f0 f1 …

    Стан R

Якщо F є порожньою послідовністю, F=, то спроба читання з файла
завершується аварійно, оскільки доступного елемента просто немає!

Файл із диску можна читати тільки після установлення файлової змінної в
початковий стан для читання, тобто установлення обов’ язкове. Можливість
чи заборона установлення файлової змінної, зв’ язаної з клавіатурою,
залежить від системи програмування. У системі Турбо Паскаль таке
установлення можливе, хоча й не обов’ язкове.

Зазначимо, що в програмі може бути довільна кількість викликів процедури
reset, і що система Турбо Паскаль дозволяє після виконання її викликів
не тільки читати з файла, а й записувати в нього, тобто змінювати його
перший елемент. І взагалі, система дозволяє змінювати за допомогою write
доступний елемент файла, яким би не було його місце в послідовності і за
будь-якого стану файла.

Читання доступного елемента файла задається процедурою READ. Її виклик
має вигляд

read(f, v),

де v – ім’ я змінної того ж типу, що і в елементів файла. В результаті
значення доступного елемента присвоюється цій змінній, а вказівник
доступного елемента переміщується на наступний елемент.

Наприклад, при читанні read(f, x) файлової змінної f із значенням

(, 0, R)

змінна x набуває значення 11, а значення f подається як

(, 1, R),

тобто доступним стає елемент 12.

Узагалі, якщо файл містить n елементів, пронумерованих від 0 до n-1, і
номер доступного компонента i менше n, то виклик read(f, x) задає
присвоювання змінній x значення i-го елемента та перехід від значення
файлової змінної (F, i, R) до (F, i+1, R). Якщо ж i=n, то кажуть, що
файл f прочитано, або вичерпано (зокрема, коли він порожній, тобто F =
). За такого значення i виклик read призводить до аварійного
завершення програми.

У виклику процедури read можна вказувати довільну кількість аргументів,
що є іменами однотипних змінних:

read ( f, v1, v2, … , vN ).

Такий виклик виконується насправді як послідовність викликів

read(f, v1 ); read(f, v2 ); … read(f, vN ).

Зрозуміло, треба гарантувати при цьому, що в файлі залишилося достатньо
непрочитаних елементів.

Підкреслимо, що до типізованих файлів незастосовна процедура читання
readln – її можна вживати лише для читання текстів.

Визначення того, чи прочитано вже файл, задається функцією EOF. За
виклику eof(f) повертається бульове значення false, якщо доступний
який-небудь елемент файла, тобто значення виразу i, i, R). Значення true повертається за i=n, що
можливо після читання всіх елементів файла без установлення його в
початковий стан.

Виклик функції eof дозволяє визначити, чи є ще у файлі непрочитані
елементи, та запобігти читання з вичерпаного файла.

Практично завжди програму варто записувати так, щоб у процесі її
виконання перевірка невичерпаності файла передувала виклику процедури
read.

Приклад 1. Напишемо програму обчислення середнього арифметичного A цілих
чисел непорожнього файла nums.dat та запису в інший файл всіх його
чисел, менших A.

Розв’яжемо задачу в такий спосіб:

1) прочитати всі числа з файла, обчислити їх суму й кількість і
визначити A;

повторно прочитати всі числа, копіюючи з них лише менші від A.

Нехай числа записано в файлі цілих з ім’ям nums.dat, а числа, менші за
середнє, переписуються в файл littls.dat. Наведені дії задаються
програмою

program numbers;

var f , g : file of integer;

v : integer; a : real;

n : integer;

begin

assign ( f, ‘nums.dat’ );

{1}reset ( f );

read ( f, v ); {читання першого елемента без перевірки !}

a:=v; n := 1;

while not eof ( f ) do

begin {з виклику eof(f) повернулося false,}

{тому можна читати доступний елемент}

read ( f, v );

a := a + v; n := n + 1

end;

{з виклику eof(f) повернулося true}

a := a/n;

{2}reset ( f );

assign(g, ‘littls.dat’); rewrite(g);

while not eof ( f ) do

begin

read ( f, v ); if v 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.

?

Нашли опечатку? Выделите и нажмите CTRL+Enter

Похожие документы
Обсуждение

Оставить комментарий

avatar
  Подписаться  
Уведомление о
Заказать реферат!
UkrReferat.com. Всі права захищені. 2000-2020