Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C_method_edit.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.01 Mб
Скачать

Інструкція до лабораторної роботи № 4

ОБРОБКА СИМВОЛЬНИХ РЯДКІВ. РОБОТА З ФАЙЛАМИ

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

Короткі теоретичні дані

1.1. Ввід-вивід.

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

Бібліотека мови Сі підтримує три рівні вводу-виводу: потоковий ввід-вивід, ввід-вивід нищого рівня і ввід-вивід для консолі і портів. Останній рівень забезпечує зручний спеціалізований обмін даними з монітором і портами вводу-виводу.

1.2. Потоковий ввід-вивід

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

Функції бібліотеки вводу-виводу мови Сі, які підтримують обмін даними з файлами на рівні потоку, дозволяють обробляти дані різних розмірів і форматів, забезпечуючи при цьому буферизований ввід і вивід. Таким чином, потік – це файл разом з доступними засобами буферизації.

Працюючи з потоком можна виконувати наступні дії:

- відкривати і закривати потоки (звязувати вказівники на потоки з конкретними файлами);

- вводити і виводити: символ, рядок, форматовані дані, порцію даних будь-якої довжини;

- аналізувати помилки потокового вводу-виводу і умови досягнення кінця потоку (кінця файлу);

- керувати буферизацією потоку і розміром буферу;

- отримувати і встановлювати вказівник (індикатор) поточної позиції в потоці.

Для того щоб можна було використовувати функції бібліотеки вводу виводу мови Сі, в програму необхідно підключити заголовочний файл stdio.h (#include<stdio.h>), який містить прототипи функцій вводу-виводу, а також визначення констант, типів і структур, необхідних для роботи функцій обміну з потоком.

1.3. Відкриття і закриття потоку

Перш ніж почати роботу з потоком, його необхідно ініціалізувати, тобто відкрити. При цьому потік зв'язується в програмі зі структурою визначеного типу FILE. Визначення структурного типу FILE є в заголовочному файлі stdio.h. В структурі FILE містяться компоненти, за допомогою яких ведеться робота з потоком, зокрема: вказівник на буфер, вказівник (індикатор) поточної позиції в потоці і інша інформація.

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

Вказівник на потік, наприклад ff, повинен бути оголошений в програмі наступним чином:

#include<stdio.h>

FILE *ff;

Вказівнпик на потік набуває значення в результаті виконання функції відкриття потоку:

ff = fopen (імя_файлу, режим_відкриття);

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

ff = fopen (“test.txt”,”r”);

де test.txt – ім'я деякого файлу, який зв'язаний з потоком.

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

Стандартно файл, який зв'язаний з потоком, можна відкрити в одному з нижче перелічених режимів:

w” – новий текстовий файл відкривається для запису. Якщо файл вже існував, то попередній вміст витирається, файл створюється по новому;

r” – існуючий текстовий файл відкривається лише для читання;

a” – текстовий файл відкривається (або створюється, якщо файлу немає) для внесення в нього нової інформації (добавлення в кінець файлу). На відміну від режиму “w” режим “а” дозволяє відкривати вже існуючий файл, не знищуючи його попередньої версії, і записувати в кінець файлу;

w+” – новий текстовий файл відкривається для запису і наступних багаторазових виправлень. Якщо файл вже існує, то попередній зміст витирається. Наступні після відкриття файлу записи і читання з нього не допустимі в будь-якому місці файлу, зокрема запис дозволений і в кінець файлу, тобто файл може збільшуватись («рости»);

r+” – існуючий текстовий файл відкривається як для читання, так і для запису в будь-якому місці файлу; але в цьому режимі неможливий запис в кінець файлу, тобто неможливе збільшення розміру файлу;

а+” – текстовий файл відкривається або створюється (якщо файлу немає) і стає доступним для змін, тобто для запису і для читання в будь-якому місці; при цьому на відміну від режиму “w+” можна відкрити існуючий файл і не знищувати його змісту; на відміну від режиму “r+” в режимі “а+” можна робити запис в кінець файлу, тобто збільшувати його розміри.

Потік можна відрити в текстовому або в двійковому (бінарному) режимі.

При відкритті потоку можуть виникати наступні помилки: вказаний файл, зв'язаний з потоком, не знайдений (для режиму «читання»); диск заповнений або диск захищений від запису і ін. Необхідно також відмітити, що при виконанні функції fopen() відбувається виділення динамічної пам'яті. При її відсутності встановлюється ознака помилки “Not enough memory” (недостатньо пам'яті). В перелічених випадках вказівник на потік в будь-якому режимі, відмінному від аварійного, ніколи не буває рівним NULL.

Наведемо типову послідовність операторів, яка використовується при відкритті файлу, зв'язаного з потоком:

if ((ff = fopen(“test.txt”, “w”)) == NULL)

{

perror(“помилка відкриття файлу test.txt \n”);

exit(0);

}

де NULL – нульовий вказівник, визначений у файлі stdio.h.

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

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