Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
самост1_1new_druk!!!.doc
Скачиваний:
24
Добавлен:
13.11.2019
Размер:
1.61 Mб
Скачать

Тема: Файловий тип.

Нетиповані файли.

Нетиповані файли використовуються для організаціі доступу до будь-яких файлів на диску, незалежно від їх структури. Файл трактується як послідовність елементів (записів) довільного типу. Розмір елементів вказується при відкриванні файла процедурами Reset або Rewrite. Інакше кажучи, нетиповані файли можна трактувати, як типовані, для яких відомий тільки розмір запису в байтах, але невідомий тип цього запису. Використовуючи в програмі нетиповані файли, програміст повинен забезпечити коректне використання прочитаної інформації.

У розділі оголошення змінних файлова змінна для нетипованих файлів оголошується наступним чином:

< Ідентифікатор файлової змінної > : file;

Процедури Reset і Rewrite мають додатковий параметр, який задає довжину елемента (запису) нетипованого файла в байтах. Якщо цей параметр відсутній, то довжина запису за замовчуванням встановлюється 128 байтів. Процедури Reset і Rewrite відкривають файл і для читання і для запису. Читання з типовапих файлів відбувається процедурою ВloсkRead, запис – процедурою BlockWrite. Процедури Assign, Reset, Rewrite. Close, Seek і Eof виконують ті ж функції, шо і для типованих файлів.

Процедура BlockRead. Зчитує один або декілька записів у змінну-буфер.

Опис процедури має вигляд: ВlockRead(var f: файл; var Buff; Соunt : word [; Result : word ]),

де f – файлова змінна, Buff (буфер) – змінна, у яку зчитуватиметься інформація з файла, Соunt – кількість елементів файла, яку повинна прочитати команда BlockRead, Result (необов'язковий параметр) – кількість елементів файла, прочитаних командою BlockRead. Процедура зчитує елементи файла (записи), кількість яких вказана в змінній Соunt, і послідовно розташовує їх, починаючи з першого байта змінної Buff. Кількість повних прочитаних записів повертається в необов'язковому параметрі Result. Якщо цей параметр не заданий, то в тому випадку, якщо число прочитаних записів не буде збігатися зі значенням змінної Count, відбудеться помилка введення-виведення. Значення змінних Соunt і Result можуть не співпадати у випадку, коли символ кінця файла був виявлений раніше, ніж відбулося читання всіх записів, вказаних у змінній Соunt. Якщо розмір запису файла перевишує одиницю, то в параметрі Result повертається число повних прочитаних записів. Таким чином, можливий неповний останній запис не враховується в параметрі Result. Весь розмір прочитаного блоку не перевищує добутку значення змінної Count на довжину запису, вказану при відкритті файла. Якщо цей добуток перевишує 65535 (64Кбайти), то виникає помилка. Після виконання процедури BlockRead поточний вказівник файла просувається на кількість записів, вказаних змінною Result.

Процедура ВlockWrite. Записує один або декілька записів із змінноїбуфера у файл. Опис процедури має вигляд:

ВlockWrite(var [: File; var Buff; Count : word [; Result : word ]),

де f – файлова змінна, Buff (буфер) - змінна, з якої зчитуватиметься інформація у файл, Соunt – кількість елементів, які повинна записати команда BlockWrite у файл, Result (необов'язковий параметр) – кількість елементів, реально записаних командою BlockWrite у файл. Із змінної Buff процедура записує у файл стільки елементів, скільки вказано у змінній Count. Кількість повністю записаних елементів (число, менше або рівне значенню змінної Count) повертається в необов'язковому параметрі Result. Якщо весь обсяг інформації, призначений для запису у файл даною командою BlockWrite, був успішно переписаний, то після виконання команди BlockWrite в параметрі Result буде міститися те ж значення, що й у змінній Count. Значення параметра Result може бути меншим, якщо, наприклад, на диску виявилося недостатньо місця, щоб записати всю інформацію, розташовану в буфер Buff. У цьому випадку, якщо розмір елемента файла перевищує одиницю, то в параметр і Result повертається число повних записаних записів. Можливий неповний останній запис, не враховується в параметрі Result. Якщо параметр Result не заданий, то у випадку, коли число записаних елементів не буде збігатися зі значенням змінної Count, відбудеться помилка введення-виведення. Обсяг інформації, що записується у файл, не перевищує кількості байт, заданих добутком значення змінної Count на довжину елемента, вказану при відкритті файла. Якщо цей добуток перевищує 65535 (64Кбайт), то виникає помилка. Після виконання процедури BlockWrite поточний вказівник файла пересувається на кількість записів, вказаних змінною Result.

Питання для самоконтролю:

  1. Для чого використовують нетиповані файли?

  2. Яким чином оголошується файлова змінна для нетипованих файлів?

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

  4. Для чого призначена процедура BlockRead?

  5. Який вигляд має опис процедури?

  6. Яке призначення процедури BlockWrite?

  7. Які параметри цієї процедури?