You are on page 1of 6

ІНСТРУКЦІЯ ДО ЛАБОРАТОРНОЇ РОБОТИ № 

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

Мета роботи – вивчити елементи мови Сі, рядки, рядкові константи,


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

1. КОРОТКІ ТЕОРЕТИЧНІ ДАНІ


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.
Після того як файл відкритий, з ним можна працювати, записуючи чи
зчитуючи з нього інформацію (в залежності від режиму роботи). Відкриті на
диску файли після закінчення роботи з ними рекомендується закривати явно.
Для цього використовується бібліотечна функція:
int fclose(вказівник_на_потік);
Відкритий файл можна відкрити повторно (наприклад, для зміни
режиму роботи з ним) тільки після того, як файл буде закритий за допомогою
функції fclose( ).

1.4. Стандартні функції для роботи з файлами.


Для вводу-виводу даних за допомогою стандартних потоків в
бібліотеці мови С визначені наступні функції:
getchar()/putchar() – ввід-вивід окремого символа;
gets()/puts() –ввід-вивід рядка;
scanf()/printf() – ввід-вивід в режимі форматування даних.
При читанні з файлу за допомогою функції getchar() може бути
досягнутий кінець файлу. В цьому випадку операціна система у відповідь на
спробу читання символу передає функції getchar() значення EOF (end of file).
1.5. Робота з файлами на диску.
Аналогічним чином (так як це робиться при роботі зі стандартними
потоками вводу-виводу) можна здійснювати роботу з файлами на диску. З
цією метою в бібліотеці мови С сключені наступні функції:
fgetc(), getc() – ввід(читання) одного символу з файлу;
fputc(), puts() – запис одного символу в файл;
fprintf() – форматований вивід в файл;
fscanf() – форматований ввід (читання) з файлу;
fgets() – ввід (читання) рядка з файлу;
fputs() –запис рядка у файл.

2. ЗАВДАННЯ
2.1. Домашня пiдготовка до роботи
1. Ознайомитися з організацією роботи вводу-виводу в мові Cі.
2. Ознайомитися з потоковим вводом, відкриттям і закриттям потоку в
мові Cі.
3. Ознайомитися з стандартними функціями для роботи з файлами в
мові Cі.
4. Дано текстовий файл, в якому міститься програма мовою С (Лабораторна
робота №3). Скласти блок-схеми алгоритмів та програму мовою С для
обробки текстового файлу з використанням розроблених функцій для роботи
зі стрічками. Оформити виконання одного із завдань у вигляді підпрограми.
Словами є слова в коментарях, назви ідентифікаторів, зарезервовані слова, які
розділяються між собою згідно із синтаксисом мови Турбо Паскаль. Дані для
роботи беруться з табл.1 за вказівкою викладача..
Таблиця 1
№ п/п Завдання
1 Сформувати і вивести на екран текстовий файл, в якому вилучити
символи “(” і “)”. Знайти кількість приголосних літер у кожному рядку.
2 Сформувати і вивести на екран текстовий файл, в якому всі символи “;”
замінюються символом “!”. Обчислити суму цифр які зустрічаються в
тексті.
3 Сформувати і вивести на екран текстовий файл, в якому містяться слова
які починаються на голосні літери. Підрахувати кількість слів, в яких
кількість символів більша трьох.
4 Сформувати і вивести на екран текстовий файл, в якому всі операторні
дужки “{” і “}” замінюються на “Begin” і “End” відповідно. Підрахувати
кількість операторів циклу for і умовних операторів if.
5 Сформувати і вивести на екран текстовий файл, в якому після кожного
рядка буде виведена цифра яка міститиме значення кількості літер в
рядку. Замінити всі символи “(” і “)” на “[” і “]” відповідно.
6 Сформувати і вивести на екран текстовий файл, в якому символ “=”
замінити на символ “==”. Вивести список всіх операторів циклу
використаних в програмі (без повторень).

7 Сформувати і вивести на екран текстовий файл, в якому пробіли


замінюються символом підкреслення. Підрахувати кількість
арифметичних операцій (+,-,*,/) у файлі.
8 Сформувати і вивести на екран текстовий файл, в якому символи “[” і “]”
замінити на “(*” і “*)”. Вивести на екран номера рядків, в яких
зустрічаються оператори циклів і умовний оператор.
9 Сформувати і вивести на екран текстовий файл, в якому залишити лише
в одній кількості зарезервовані слова, решту замінити на символ “***”.
Вивести на екран номери рядків, в яких зустрічаються цифри.
10 Сформувати і вивести на екран текстовий файл, в якому усі символи
замінити на числа від 0 до 9. Знайти суму всіх чисел в кожному рядку.
11 Сформувати і вивести на екран текстовий файл зі стрічок, в яких
вилучаються слова “for”. Вивести на екран номера рядків, в яких
зустрічаються слова “printf” та “scanf”.
12 Сформувати і вивести на екран текстовий файл в якому не зустрічаються
слова “for”, “while”, “іf”, “else”. Підрахувати кількість рядків, в яких
кількість приголосних літер парна.
13 Сформувати і вивести на екран текстовий файл в якому усі голосні
літери замінити на символ “*”. Вивести на екран кількість літер в
кожному рядку файлу.
14 Сформувати і вивести на екран текстовий файл що містить лише
послідовності символів, які містяться всередині операторних дужок “{” –
“}”. Перевести в цих рядках символи в їх числове представлення і
підрахувати їх суму.
15 Сформувати і вивести на екран текстовий файл в якому вилучити слова
“while”, “if”, “for”. Вивести на екран рядки в яких містяться цифри і в
кінці рядка дописати їх суму.
16 Сформувати і вивести на екран текстовий файл в якому всі приголосні
літери замінити символом “@”. Вивести на екран рядки з парною
кількістю символів.
17 Сформувати і вивести на екран текстовий файл в якому символи “+”
замінюються словом “SUMA”, символи “-” замінюються символом
“MULT”, символи “/” – замінюються символом “DIV”. Підрахувати і
вивести на екран кількість символів “=” у кожному рядку.
18 Сформувати і вивести на екран текстовий файл, в якому є лише слова які
починаються на голосні літери. Вивести на кран всі числа які
зустрічаються у файлі.
19 Сформувати і вивести на екран текстовий файл в якому голосні літери
замінити на символ “1” а приголосні на симврол “0”. Підрахувати і
вивести на екран кількість символів, які не являються символом “1” і “0”.
20 Сформувати і вивести на екран текстовий файл в якому видалити
операторні дужки “{” і “}”. Підрахувати і вивести на екран кількість
голосних і кількість приголосних літер в рядку.
21 Сформувати і вивести на екран текстовий файл в якому кожне число
домножене на 10. Вивести на екран рядки з непарною кількістю літер.
22 Сформувати і вивести на екран текстовий файл в якому символи “;”
замінені на “END_LINE”. Підрахувати кількість великих і малих літер у
кожному рядку.
23 Сформувати і вивести на екран текстовий файл в якому усі літери які
зустрічаються замінити послідовно на літери в алфавітному порядку.
Вивести на екран непарні рядки файлу.
24 Сформувати і вивести на екран текстовий файл в якому симсвол “=”
замінити на “!=”. Підрахувати кількість непарних чисел у кожному
рядку.
25 Сформувати і вивести на екран текстовий файл в якому замінити всі
символи на непарні числа від 1 до 9. Знайти і вивести на екран суму всіх
чисел в кожному рядку.
26 Сформувати і вивести на екран текстовий файл в якому усі символи “+”,
“-“, “*”, “/” замінити на числа в порядку зростання їх значень.
Підрахувати і вивести на екран кількість літер в кожному рядку.
27 Сформувати і вивести на екран текстовий файл в якому видалити всі
голосні літери. Підрахувати і вивести на екран кількість арифметичних
операцій (+, -, *, /) у кожному рядку.
28 Сформувати і вивести на екран текстовий файл в якому присутні лиш
стрічки з ключовими словами “FOR” і “WHILE”. Підрахувати і вивести
на екран кількість голосних літер в кожному рядку.
29 Сформувати і вивести на екран текстовий файл в якому усі малі літери
замінити на великі. Підрахувати і вивести на екран кількість символів,
які не є літерами у кожному рядку.
30 Сформувати і вивести на екран текстовий файл у якому вилучені рядки з
парною кількістю символів. Вивести на екран суму усіх чисел у файлі.
31 Сформувати і вивести на екран текстовий файл в якому пробіл замінити
символом “_”. Вивести на екран рядки з непарною кількістю символів.
32 Сформувати і вивести на екран текстовий файл в якому вилучені ключові
слова “IF”, “WHILE”, “FOR”. Вивести в кінці кожного рядка кількість
голосних літер.
33 Сформувати і вивести на екран текстовий файл в якому видалити всі
рядки, в яких непарна кількість символів. Вивести на екран суму
голосних і суму приголосних літер в кожному рядку.
34 Сформувати і вивести на екран текстовий файл в якому видалити слово
“FOR” і “IF”. Вивести на екран лише голосні літери в кожному рядку.
35 Сформувати і вивести на екран текстовий файл в якому заміть символів
вивести їхнє числове представлення в таблиці ASCII. Вивести на екран
кількість голосних і приголосних літер в кожному рядку.

You might also like