Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП Конспект лекций - Паскаль.doc
Скачиваний:
20
Добавлен:
30.11.2018
Размер:
1.46 Mб
Скачать

Тема 25: Обробка не типізованих файлів

Файли, що не типізуються, оголошуються як файлові змінні типа FILE і відрізняються тим, що для них не вказаний тип компонентів. Відсутність типа робить ці файли, з одного боку, сумісними з будь-якими іншими файлами, а з іншою дозволяє організувати високошвидкісний обмін даними між диском і пам'яттю.

При ініціації файлу, що не типізується, процедурами RESET або REWRITE можна вказати довжину запису файлу, що не типізується, в байтах.

Наприклад, так:

var

f: file;

begin

.......

assign(f, ''myfile.dat'')

reset(f,512);

.......

end.

Довжина запису файлу, що не типізується, вказується другим параметром при зверненні до процедур RESET або REWRITE, як яке може використовуватися вираження типа WORD. Якщо довжина запису не вказана, вона приймається рівною 128 байтам.

Турбо Паскаль не накладає яких-небудь обмежень на довжину запису файлу, що не типізується, за винятком вимоги позитивності і обмеження максимальної довжини 65535 байтами (ємкість цілого типа WORD). Проте для забезпечення максимальної швидкості обміну даними слід задавати довжину, яка була б кратна довжині фізичного сектора дискового носія інформації (512 байт). Більш того, фактично простір на диску виділяється будь-якому файлу порціями - кластерами, які залежно від типа диска можуть займати 2 і більш суміжних секторів. Як правило, кластер може бути прочитаний або записаний за один зворот диска, тому найвищу швидкість обміну даними можна отримати, якщо вказати довжину запису, рівну довжині кластера.

При роботі з файлами, що не типізуються, можуть застосовуватися всі процедури і функції, доступні файлам, що типізуються, за винятком READ і WRITE, які замінюються відповідно високошвидкісними процедурами BLOCKREAD і BLOCKWRITE. Для виклику цих процедур використовуються наступні пропозиції:

BLOCKREAD (<ф .п . >, <буф> < [, <NN>] )

BLOCKWRITE (<ф . п . >, <буф> < [, <NN>] )

Тут <буф> - буфер: ім'я змінної, яка братиме участь в обміні даними з дисками;

<D> - кількість записів, які мають бути прочитані або записані за одне звернення до диска;

<NN> - необов'язковий параметр, що містить при виході з процедури кількість фактично оброблених записів.

За одне звернення до процедур може бути передано до N*recs байт, де RECS - довжина запису файлу, що не типізується. Передача йде, починаючи з першого байта змінної <буф>. Програміст повинен поклопотатися про те, щоб довжина внутрішнього представлення змінної <буф> була достатньою для розміщення всіх N*recs байт при читанні інформації з диска. Якщо при читанні вказана змінна <буф> недостатньої довжини або якщо в процесі запису на диск не виявиться потрібного вільного простору, виникне помилка введення-виводу, яку можна заблокувати, вказавши необов'язковий параметр <NN> (змінна типа WORD).

Після завершення процедури покажчик зміщується на <NN> записів. Процедурами SEEK, FILEPOS і FILESIZE можна забезпечити доступ до будь-якого запису файлу, що не типізується.

Питання для контролю.

  1. Які файли називаються не типізованими?

  2. В чому переваги не типізованих файлів?

  3. Де можна вказати довжину запису файлу?

  4. Як залежить швидкість обміну даними від довжини запису файла?

  5. які специфічні процедури використовуються для роботи з не типізованими файлами?