Програмування С, С++теорія та практика (частина 1)
1.15.1 Текстові файли
Розглянемо спочатку роботу з текстовими файлами. Відкриття текстового файлу Іезґ. 1x1 може мати вигляд :
#іпс1ийе<з'Ьйіо. Ь>
Vоій таіп()
{
ЕІЬЕ *£;
і£ ((£=£ореп("'Ьез'Ь.'Ьх'Ь", "г^"))==ниьь)
{
ргіп'Ь£("Файл не вдалося відкрити.\п"); ге'Ьигп;
}
£с1озе(£);
}
В даному прикладі змінна /зв‘язується з файлом „ієіі.Ш”, який відкривається як текстовий тільки для читання.
З відкритого таким чином файлу можна читати інформацію. Після закінчення роботи з файлом, його необхідно закрити за допомогою функції /сІОІ'е().
Якщо файл відкривався би за допомогою/ореп{“Іеі1.Ш”, “гі+”); , то можна було б не тільки читати, але й записувати в нього інформацію.
З текстового файлу можна читати інформацію по рядках, по символах або за форматом.
Записування символу в файловий потік здійснюється функцією риґс().
іпі ри{с(іп{ сИ, РИБ *1);
Читання рядка здійснюється за допомогою функції /§еґз().
еИаг *1де{5(сІіаг *5,іп{ п,ПІ_Е *5{геат);
У виклику функції /деґі'() : 5 - покажчик на буфер, в який читається рядок, п - кількість символів. Читання символу в рядок проходить або до появи символу кінця рядка „ \п ”, або читається п-1 символ. В кінці прочитаного рядка записується нульовий символ.
#іпс1ийе<з'Ьйіо. Ь>
#іпс1ийе<з'Ьгіпд.Ь>
Vоій. таіп () {
сЬаг з [80] ;
ЕІЬЕ *£;
і£ ((£=£ореп("1.срр", "г£") )==ниьь) { ргіп'Ь£("ТЬеге аге ап еггог\п"); ге'Ьигп;
}
Йо {
£де£з(з,80,£); ргіп^£("%з",з);
} мЬі1е (!£ео£(£));
£с1озе(£);
}
Функція /ев/() перевіряє, чи не прочитаний символ завершення файла. Якщо такий символ прочитаний, то /ев/() повертає ненульове значення і цикл завершується.
Читання з текстового файлу форматованих даних може здійснюватися функцією рсап/. Синтаксис :
іп{ І^сап^РІІ-Е *5Їгеат, соп5Ї сИаг *Ю>гта{[, асІсІге55, ...]);
Параметр /вгтаґ визначає рядок форматування аргументів, які задаються своїми адресами.
При форматованому читанні можуть виникати помилки у зв’язку з досягненням завершення файлу або невірним форматом записаних у файлі даних. Перевірити, чи успішно пройшло читання даних можна за значенням, яке повертає функція /&сап/(). При успішному читанні вона повертає кількість прочитаних полів. Тому читання даних можна організовувати наступним чином : і£ (£зсап£(£,"%гі%гі%гі",&а,&Ь,&с)!=3)
{
ргіп^£("Помилка читання!\п");
};
Існує також і ряд функцій для запису даних у текстовий файл. Найчастіше використовуються функції/§еґс(),/риґ&() та /ргіпґ/().
Функція /деіс() використовується для читання чергового символу з потоку, відкритого функцією /ореп().
іпі 1деіс(РІІ_Е *1);
Синтаксис функції/ргіпґ/() :
іпі ІргіпЩРІІ-Е *5ігеат, соп5І сИаг *1огтаі[,агдитепі,...]};
Вона працює майже мак само, як і функція ргіпґ/(), але їй потрібний додатковий аргумент для посилання на файл. Він є першим у списку аргументів. Наводимо приклад, який ілюструє звертання до наведених вище функцій:
#іпс1ийе<зЬйіо.Ь>
Vоій таіп()
{
ЕІЬЕ *£і; іпЬ аде;
£і=£ореп("аде. ЬхЬ", "г") ; /* відкриття файла для читання */ £зсап£ (£і, "%й", &аде) ; /*читання з файлу числового значення
*/
£с1озе(£і) ; /* закриття файла */
£і=£ореп ("йа^а. -Ьх-Ь", "а") ; /* відкриття файла для додавання інформації в кінець */
£ргіпЬ£ (£і, "Аде==%й. \п", аде) ; /* запис рядка в файл */ £с1озе(£і) ; /* закриття файла */
}
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99