Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Reset, Rewrite, Read, Write, Close




Для введення - висновку використовуються процедури:

Read(f,X);

Write(f,X);

де f - ім'я логічного файлу, Х - або змінна, або масив, або рядок, або безліч, або запис з таким же описом, яке має компонента файлу.

Виконання процедури Read(f,X) складається в читанні з зовнішнього пристрою одного компонента файлу і запис її в X. Повторне застосування процедури Read(f,X) забезпечить читання наступної компонента файлу і запис її в X.

Виконання процедури Write(f,X) складається в записі X на зовнішній пристрій як однієї компоненти. Повторне застосування цієї процедури забезпечить запис X як наступного компонента файлу.

Для роботи з компонентними файлами введена розширена форма операторів введення і висновку:

Read(f,X1,X2,...XK);

Write(f,X1,X2,...XK);

Тут f - компонентний файл, а змінні Х1, Х2,...ХК повинні мати той же тип, що й оголошений тип компонентів файлу f.

2.13.3 Безтипові файли

Безтипові файли дозволяють записувати на диск довільні ділянки пам'яті ЕОМ і зчитувати їх з диска в пам'ять. Операції обміну з безтиповими файлами здійснюється за допомогою процедур BlokRead і BlockWrite. Крім того, вводиться розширена форма процедур Reset і Rewrite. В іншому принципи роботи залишаються такими ж, як і з компонентними файлами.

Перед використанням логічний файл

var f: File;

повинний бути зв'язаний з фізичним за допомогою процедури Assign. Далі файл повинний бути відкритий для читання чи для запису процедурою Reset чи Rewrite, а після закінчення роботи закритий процедурою Close.

При відкритті файлу довжина буфера встановлюється за замовчуванням у 128 байт. TURBO PASCAL дозволяє змінити розмір буфера вводу - виводу, для чого варто відкривати файл розширеним записом процедур

Reset(var f: File; BufSize: Word) чи Rewrite(var f: File; BufSize: Word)

Параметр BufSize задає число байтів, що зчитуються з файлу чи записаних у нього за одне звертання. Мінімальне значення BufSize - 1 байт, максимальне - 64 К байт. Читання даних із без типового файлу здійснюється процедурою BlockRead(var f: File; var X; Count: Word; var QuantBlock: Word);

Ця процедура здійснює за одне звертання читання в змінну X кількості блоків, задана параметром Count, при цьому довжина блоку дорівнює довжині буфера. Значення Count не може бути менше 1. За одне звертання не можна прочитати більше, ніж 64 К байтів.

Необов'язковий параметр QuantBlock повертає число блоків (буферів), прочитаних поточної операцією BlockRead. У випадку успішного завершення операції читання QuantBlock = Count, у випадку аварійної ситуації параметр QuantBlock буде містити число вдале прочитаних блоків. Звідси випливає, що за допомогою параметра QuantBlock можна контролювати правильність виконання операції читання.

Запис даних у без типовий файл виконується процедурою

BlockWrite(var f: File; var X; Count: Word; var QuantBlock: Word);

який здійснює за одне звертання запис із змінної X кількості блоків, задана параметром Count, при цьому довжина блоку дорівнює довжині буфера.

Необов'язковий параметр QuantBlock повертає число блоків (буферів), записаних успішно поточною операцією BlockWrite.

2.13.4 Послідовний і прямий доступ

Зміст послідовного доступу полягає в тім, що в кожен момент часу доступний лише один компонент з усієї послідовності. Для того щоб звернутися (одержати доступ) до компонента з номером К, необхідно переглянути від початку файлу К-1 попередню компоненту. Після звертання до компоненти з номером К можна звертатися до компоненти з номером К+1. Звідси випливає, що процеси формування (запису) компонентів файлу й перегляду (читання) не можуть довільно чергуватися. Таким чином, файл спочатку будується за допомогою послідовного додавання компонент у кінець, а потім може послідовно проглядатися від початку до кінця.

Розглянуті раніше засоби роботи з файлами забезпечують послідовний доступ.

TURBO PASCAL дозволяє застосовувати до компонентного і без типового файлу, записаного на диск, спосіб прямого доступу. Прямий доступ означає можливість заздалегідь визначити у файлі блок, до якого буде застосована операція вводу - виводу. У випадку без типових файлів блок дорівнює розміру буфера, для компонентних файлів блок - це один компонент файлу.

Прямий доступ припускає, що файл являє собою лінійну послідовність блоків. Якщо файл містить n блоків, то вони нумеруються від 1 через 1 до n. Крім того, вводиться поняття умовної границі між блоками, при цьому умовна границя з номером 0 розташована перед блоком з номером 1, границя з номером 1 розташована перед блоком із номером 2 і, нарешті, умовна границя з номером n знаходиться після блоку з номером n.

Реалізація прямого доступу здійснюється за допомогою функцій і процедур FileSize, FilePos, Seek і Truncate.

Функція FileSize(var f): Longint повертає кількість блоків у відкритому файлі f.

Функція FilePos(var f): Longint повертає поточну позицію у файлі f. Позиція у файлі - це номер умовної границі. Для тільки що відкритого файлу поточною позицією буде границя з номером 0. Це значить, що можна записати чи прочитати блок із номером 1. Після читання чи запису першого блоку поточна позиція переміститься на границю з номером 1, і можна буде звертатися до блоку з номером 2. Після прочитання останнього запису значення FilePos дорівнює значенню FileSize.

Процедура Seek(var f; N: Longint) забезпечує призначення поточної позиції у файлі (позиціонування). У параметрі N повинний бути заданий номер умовної границі, що передує блоку, до якого буде вироблятися наступне звертання. Наприклад, щоб працювати з блоком 4, необхідно задати значення N, рівне 3. Процедура Seek працює з відкритими файлами.

Процедура Truncate(var f) установлює в поточній позиції ознаку кінця файлу і видаляє (стирає) усі наступні блоки.

Приклад. Нехай на НМД мається текстовий файл ID.DAT, що містить числові значення дійсного типу по два числа в кожнім рядку - значення аргументу і функції відповідно. Кількість пар чисел не більш 200. Скласти програму, що читає файл, значення аргументу й функції записує в одномірні масиви, підраховує їхню кількість, виводить на дисплей і записує у файл компонентного типу RD.DAT.

Program F;

Var

rArg, rF: Array[1..200] of Real;

inf: Text;

outf: File of Real;

n, l: Integer;

Begin

Assign(inf,'ID.DAT');

Assign(outf,'RD.DAT');

Reset(inf);

Rewrite(outf);

n:=0;

While not EOF(inf) do

Begin

n:=n+1;

ReadLn(inf,rArg[n],rF[n])

End;

for l:=1 to n do

Begin

WriteLn(l:2,rArg[l]:8:2,rF[l]:8:2);

Write(outf,rArg[l], rF[l]);

End;

Close(outf)

End.

Показники

Операційна система MS - DOS весь простір, що адресується поділяє на сегменти. Сегмент - це ділянка пам'яті розміром 64 К байт. Для завдання адреси необхідно визначити адресу початку сегмента й зсув відносно початку сегмента.

У TURBO PASCAL визначений адресний тип Pointer - показник. Змінні типу Pointer

var p: Pointer;

містять адресу будь - якого елемента програми і займають 4 байти, при цьому адреса зберігається як два слова, одне з них визначає сегмент, друге - зсув.

Змінну типу показник можна описати іншим способом.

type NameType= ^T;

var p: NameType;

Тут p - змінна типу показник, зв'язана з типом Т за допомогою імені типу NameType. Описати змінну типу показник можна безпосередньо в розділі опису змінних:

var p: ^T;

Необхідно розрізняти змінну типу покажчик і змінну, на яку цей показник посилається. Наприклад, якщо p - посилання на змінну типу Т, то p^ - позначення тієї ж змінної.

Для змінних типу показник введено стандартне значення NIL, що означає, що покажчик не посилається ні на який об'єкт. Константа NIL використовується для будь-яких показників.

Над показниками не визначено ніяких операцій, крім перевірки на рівність і нерівність.

Змінні типу показник можуть бути записані в лівій частині оператора присвоювання, при цьому в правій частині може знаходитися або функція визначення адреси Addr(X), або виразу @X, де @ - унарна операція взяття адреси, X - ім'я змінної будь-якого типу, у тому числі процедурного.

Змінні типу показник не можуть бути елементами списку введення - виведення.


3 ВАРІАНТИ ЗАВДАНЬ НА КОНТРОЛЬНУ РОБОТУ





Поделиться с друзьями:


Дата добавления: 2016-03-27; Мы поможем в написании ваших работ!; просмотров: 437 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Стремитесь не к успеху, а к ценностям, которые он дает © Альберт Эйнштейн
==> читать все изречения...

2175 - | 2132 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.