Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
R10_Файл_12.doc
Скачиваний:
3
Добавлен:
22.12.2018
Размер:
253.44 Кб
Скачать

Технологія обробки файлів даних

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

При роботі з файлами слід відзрізняти власне обробку даних від зчи­тування даних з файлу або записування даних у файл. Обробка даних є внутрішньою справою програми і не має відношення до роботи з файлами. Робота з файлом полягає тільки в передаванні даних: за­писуванні їх в файл або зчитуванні їх із файлу. Тому основними операціями при роботі з файлами є операції читання (введення), тобто копіювання значення доступного елемента файлу у змінну, означену у програмі, та операція запису (виведення) - копіювання значення змінної у доступний елемент файлу.

Введення та виведення даних здійснюється через буфер. Файловий буфер це область ОП, яка виділяється для кожного файлу і служить для тимчасового збереження даних під час їх передачі від джерела до приймача інформації. Під час запису у файл уся інформація спочатку спрямовується до буфера, де накопичується, поки увесь обсяг буфера не буде заповнений. Тільки після цього або після спеціальної команди скидання даних чи закриття файлу відбувається передача даних на зовнішній пристрій. При читанні з файлу дані спочатку зчитуються у буфер, причому зчитується стільки даних, скільки вмішується у буфері. Розмір буфера визначається ОС і є кратним довжині фізичного сектора (512 байт). Тобто, буферизація – це по­переднє накопичення вмісту файлу в оперативній нам'яті, якщо файл по­трібно читати, або підготовка даних в оперативній пам'яті перед записом з наступним перенесенням на записуючий пристрій блоків даних стандартної довжини. Механізм буферізації введення - виведення дозволяє швидше і ефективніше обмінюватися інформацією із зовнішніми пристроями.

Хоча основними діями при роботі з файлом даних є операції читання і запису його елементів, тільки ними наявні у мовах програмування засоби роботи з файлами не обмежуються. Для організації обробки файлів даних використовуються також стандартні засоби підготовки файлу до роботи та завершення роботи з файлом. Ці функції виконуються у різних мовах програмування по-різному.

Для мови Pascal типовою є така послідовність дій із файлом даних:

  1. зв'язування файлової змінної з фізичним файлом;

  2. відкриття файла;

  3. його обробка;

  4. закриття файла.

Зв'язування файлової змінної з фізичним файлом. Вся робота з файлом виконується через відповідну файлову змінну. Тому перед початком роботи будь-який фізичний файл необхідно зв'язати із змінною, за допомогою якої буде здійснюватися доступ до нього у програмі. Таке зв'язування виконується у різних мовах програмування по-різному. Так у Pascal для цього служить спеціальна процедура Аssign:

assign (<файлова змінна>, <ім'я фізичного файлу>).

Формат імені файла визначається ОС. Можливі різновиди його задання :

Опис

Приклад

Примітка

шлях доступу до файлу

assign ( f, 'D:\ MyDir\ bibl.dat' );

ідентифікатор рядкової змінної

name := 'D:\ MyDir\ bibl.dat';

assign ( f, name);

символічне ім'я пристрою введення-виведення

assign (f, 'LPT2');

CON – клавіатура/дисплей, COM, LPTn - фіктивний пристрій

порожній рядок ('')

Assign (f, ''); <=> assign (f, 'CON');

файл зв'язаний з консоллю

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

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

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

  • пошук файла на зовнішньому носії;

  • утворення буфера для обміну з файлом;

  • встановлення поточного покажчика файлу на його початок;

  • установка певного режиму обробки файлу (режим зчитування даних із файла, режим запису даних у файл).

Відкриття файлів даних виконується у різних мовах програмування по-різному. Так у Pascal для цього служать процедури Reset, Rewrite, Append. Різниця між ними полягає у початкових діях в залежності від типу файлу.

Обробка файла. Полягає у реалізації дій по зчи­туванню даних із файлу або запису даних у файл.

У різних мовах програмування для реалізації відповідних дій використовуються різні стандартні засоби. Так у Pascal для цього служать стандартні процедури введення-виведення Read, ReadLn, Write, WriteLn. Специфіка їх застосування залежить від типу файлу, що обробляється.

Для перевірки факту досягнення кінця файлу даних використовується спеціальна логічна функція. У мові Pascal – це функція Eof , що має наступний формат:

Eof (<файлова змінна>).

Якщо вона повертає значення true ("істина" ), то це означає, що всі елементи файлу прочитані і покажчик файлу зпозиційований на маркері кінця файлу (знаходиться за останнім елементом файлу) або файл після відкриття виявився порожнім; у всіх інших випадках функція повертає значення false. Ця функція дозволяє використовувати для читання елементів файлу цикл з передумовою. Наприклад,

while not eof (f) do …

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

Виконання операцій з файлами може викликати багато помилкових ситуацій (наприклад, при неправильно встановленій дискеті, відсутності файла даних, тощо). За замовчуванням Pascal автоматично виконує перевірку на коректність операцій введення-виведення. При виявленні помилки виконання програми припиняється і на екран виводиться відповідне повідомлення.

Pascal дає змогу керувати режимом обробки помилок. Так, щоб запобігти перериванню програми у подібних випадках, використовують директиву компілятора {$І-}, яка відключає автоматичний контроль помилок введення-виведення. При цьому у випадку виникнення відповідної помилки її код зберігається у системній змінній ІnOutRes (0 – означає успішне виконання операції).

В подальшому ідентифікувати результат операції введення-виведення можна за допомогою функції IОResult, яка повинна викликатися відразу після операції введення або виведення.

Наприклад, обробка відсутності файлу з даними :

assign (f, 'c:\MyFile');

{$I-}

reset (f);

{$I+}

if IОResult <> 0 then writeln ('File is not found or not read');

else writeln ('File size - ', FileSize (f));

Закриття файла. Логічним закінченням роботи з відкритим файлом є його закриття. Здійснюється воно майже у всіх мовах програмування процедурою Close. Формат даної процедури наступний:

Close (<файлова змінна>).

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

Якщо процедура Close не буде виконана, файл на зовнішньому носії буде створений, проте вміст останнього буфера у зовнішній файл перенесений не буде. Виконання виклику Сlose не розриває зв'язку імені файлової змінної із зовнішнім файлом, але читання та запис у файл за допомогою цієї файлової змінної неможливі до наступного відкривання чи зв'язування з подальшим відкриванням.

З файлами даних можна виконувати певні системні операції. Такими операціями є, наприклад, перейменування і видалення файлів. З цією метою система програмування, зазвичай, доповнюється ком­плексом відповідних стандартних підпрограм. Так у мові Pascal для реалізації зазначених вище дій служать процедури rename і erase:

  • erase (<файлова змінна>) - видалення файлу, що визначається вказаною файловою змінною;

  • rename (<файлова змінна>, <нове ім’я>) - перейменування відповідного файлу.

Ці дії виконуються тільки над закритими файлами.

Інколи програмам потрібно отримувати більш детальну інформацію про файлову структуру, наприклад, шукати потрібні файли, перебирати катало­ги тощо. З цією метою система програмування доповнюється також ком­плексом процедур обробки каталогів. Най­частіше, в досить простих програмах, що мають на меті тільки зберігати результати розрахунків або проміжні далі, ці процедури просто не потрібні. Саме тому вони, зазвичай, виносяться в окремі бібліотеки (модуль DOS, Windows, тощо).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]