Робота з файлами, робота з pascal, статті, програмування - програмування c, delphi, c #

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







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

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

  1. Створення (опис) файлової змінної;
  • Зв'язування цієї змінної з конкретним файлом на диску або з пристроєм вводу-виводу (екран, клавіатура, принтер і т.п.);
  • Відкриття файлу для запису або читання;
  • Дії з файлом: читання або запис;

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

  • PRN - принтер. При записи в цей пристрій ви отримаєте інформацію на принтер.
  • Далі хочу звернути увагу на останній етап - закриття файлу. В принципі, не обов'язкова умова для файлів, з яких ми читаємо дані. Якщо не закриємо - помилки це не викличе, наслідків теж. Однак обов'язково закривати файл, якщо ми здійснювали в нього запис. Справа в тому, що якщо ми пишемо дані в файл на диску і забуваємо його закрити - інформацію не зберегтися. Вона (інформація) поміщається в тимчасовий буфер, який запишеться на диск тільки при закритті файлу.


    Типи файлових змінних

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

  • File of _любой_тіп_ - так звані "типізовані" файли, тобто файли, що мають тип. Цей тип визначає, якого роду інформація міститься в файлі і задається в параметре_любой_тіп_. Наприклад, якщо ми напишемо так:

    F: File of Integer;

  • File - нетипізований файл. Коли ми вказуємо як тип файлу просто File, тобто без типу:

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

    Отже, розібралися з типами файлів. Тепер давайте по порядку розбирати дії, що застосовуються для роботи з файлами. Я говорив про них вище.


    Зв'язування змінної з файлом

    Самий універсальний крок. Виконується однієї і тієї ж процедурою для всіх типів файлів, а саме процедурою Assign.

    Assign (_переменная_файлового_тіпа_, 'шлях до файлу');

    Як бачите, в якості параметрів задаються змінна лібого файлового типу і рядок - шлях до файлу, який, за правилами DOS, не може бути довшим 79 символів. Ось приклад використання assign.

    Як бачите, це дуже просто і сама процедура Assign проблем не викликає. Давайте тепер розглянемо наступний етап.

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

    Проте цей процес не складний і полягає в використанні однієї з трьох наявних процедур:







    Відкриватися файл на читання. Як параметр - файлова змінна будь-якого з перерахованих вище типів. Це може бути текстовий, типізований або не типізований файл. У випадку з текстовим файлом, він відкривається тільки на читання. У випадку з типізованим і Нетипізовані файлом - він відкривається на читання і запис.

    Ця процедура відкриває текстовий файл (тільки текстовий!) На запис. Вище я сказав, що Reset при завданні параметра типу Text не дозволить писати в нього дані, відкривши файл лише для читання. Тобто якщо ви використовуєте текстовий файл і хочете робити в нього запис, нужнo використовувати Append. Якщо читання - Reset. В інших випадках справа обходитися однією процедурою Reset.

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

  • ReWrite (F) - створює новий файл або перезаписує існуючий. Будьте обережні, якщо не хочете випадково видалити потрібний файл. Нагадаю, файл, відкритий за допомогою цієї процедури буде повністю перезаписаний.

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

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

    - включення виведення помилок

    - вимикання виведення помилок

    По суті справи відсутній файл - це помилка, яка повертається функцією IOResult. Якщо ж ця функція повертає 0, то файл успішно відкритий, без помилок. Ось і вимальовується послідовність дій, необхідних для перевірки на наявність файлу:

    1. Пов'язуємо змінну з файлом;
  • Вимикаємо висновок помилок на екран -
  • Відкриваємо файл необхідної нам процедурою;
  • Включаємо висновок помилок - нехай буде для подальшого відстеження таких;
  • Перевіряємо, якщо IOResult повертає нуль, то все було шляхом і файл відкритий. Інакше виводимо помилку.
  • Ось приклад такої програми:

    Вище я говорив про те, навіщо потрібно закривати файл і коли треба це робити. Закриття файлу проводитися за допомогою процедури Close (F). де F - це змінна файлового типу. Ця процедура одна для всіх типів файлів.


    Запис і читання файлів. частина I

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

    Читання файлів. Читання файлів проводиться за допомогою відмінно відомих нам процедур Read і Readln. Вони використовуються також, як і при читанні інформації з клавітури. Відмінність лише в тому, що перед змінної, в яку поміщається лічений значення, вказується змінна файлового типу (дескриптор файлу):

    Тут F - дескриптор файлу, C - змінна (Char, String - для текстових, будь-якого типу - для типізованих файлів).

    Також відразу хочу згадати про одну, мабуть найголовнішою функції при читанні файлів. Це функція перевірки на кінець файлу - Eof (F): Boolean;. Як параметр - файлова змінна будь-якого типу. Функція повертає TRUE якщо досягнуто кінець файлу і FALSE інакше. Тут все дуже просто, демонстрації заради давайте напишемо невелику програму. Нехай маємо текстовий файл. Давайте його роздрукуємо і заодно порахуємо, наприклад, кількість прогалин:

    Думаю, тут все ясно. Продовжуємо рухатися далі і подивимося, як проводитиметься запис в файли.

    Запис в файли. Ви ще не здогадалися? Запис в файли проводитися точно так же, як і запис на екран - за допомогою процедур Write і Writeln. Як і у випадку з читанням, перед записується в файл змінної вказується тескріптор файлу:

    Тут F - дескриптор, S - змінна.

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

    • Відриваємо типізований файл з Integer; (Перевіряємо на помилку і т.п.)
  • Читаємо всі числа в масив (зчитуємо, поки не кінець файлу)
  • Сортуємо масив по зростанню;
  • Записуємо відсортований масив назад в файл.
  • Виходить така програма:

    Програма дуже проста і добре демонструє роботу з типізований файлами. Як сортування масиву я використовую метод бульбашки, щоб перезаписати файл використовую ReWrite. Начебто не повинно виникати ніяких складнощів. Будуть проблеми, пишіть. Ну а на сьогодні, мабуть, все. Цієї інформації вам буде досить, в наступному випуску займемося, як я вже сказав, нетипізований файлами і продовжимо писати програму "Нотатки".

    Програмування для чайників.







    Схожі статті