- •§ 2. Типи даних
- •§ 3. Присвоєння
- •§ 5. Потоки. Введення - виведення даних
- •§ 6. Адреси даних. Вказівники. Динамічна пам'ять
- •§ 7. Файли
- •§ 8. Розгалуження
- •§ 9. Цикли
- •§ 10. Функції (1)
- •§ 11. Функції (2)
- •§ 12. Масиви
- •§ 13. Рядки
- •§ 14. Структури, списки, стеки, черги, об'єднання
- •§ 15. Графіка
- •§ 16. Вступ до об'єктно-орієнтованого програмування
- •§ 1. Вступ до візуального програмування
- •§ 2. Задача про анкету
- •§ 3. Задача про обмін валюти
- •§ 4. Задача табулювання функції
- •§ 5. Створення навчальної програми
§ 7. Файли
Часто виникає потреба опрацьовувати інформацію, розміщену на зовнішніх носіях (на дисках), або виводити результати програми не на екран монітора, а у файл. Прикладами таких даних є інформація про розклад руху транспорту, успішність студентів, наявність товарів у магазинах, адреси, анкетні дані тощо.
Файл - це сукупність даних, які розміщені на зовнішньому носії, зокрема, на жорсткому диску. Дані у файлі називаються елементами. Кількість даних під час опрацювання файлів не зазначають. Файли можуть містити як текстову, так і
числову інформацію.
Існує декілька бібліотечних функцій, які дають змогу зчитати інформацію з файлу або спрямовувати потік виведення уфайл. Функції, які розглядатимемо, описані в бібліотеці
. Тому для роботи з файлами насамперед необхідно почити саме цю бібліотеку.
Зауваження 1. У модулі fstream.h також містяться описи стандартних потоків cout і cin. Тому, щоб зчитати інформацію з файлу і вивести її на екран монітора, модуль iostream.h підключати не обов'язково.
Для опрацювання файлу його необхідно відкрити, виконати потрібні дії та закрити.
Зчитування даних із файлу. Щоб зчитати вхідні дані з файлу, необхідно оголосити файлову змінну та відкрити файл читання так (розглянемо два способи):
-
Ifstream <назва файлової змінної>(<зовнішня назва>,ознака 1 |ознака2 |... | ознакаN);
бо так:
Ifstream <назва файлової змінної>; <назва файлової змінної>.(<зовнішня назва>);
Дія команд. Підключаємо потік введення даних із файлу та налагоджуємо зв'язок між файловою змінною у програмі та файлом на зовнішньому носії. Назву зовнішнього файлу треба записувати у лапках. Ознаки слугують для визначення прав доступу до файлу (див. пункт „Ознаки"). Ознаки зазначати необов'язково. У випадку, коли їх задавати не потрібно, наведені дві форми запису тотожні, і можна обирати одну з них.
Приклад 1. Відкрити зовнішній файл МуТехt.txt; для читання з нього даних можна так: ifsteram MyFile(“MyText.txt”);
або так:
ifsteram MyFile; MyFile.open(“MyText.txt”);
Тут MyFile - це файлова змінна, що асоціюється у програмі з відповідним зовнішнім файлом на диску. Введення даних виконують командою введення >>. Наприклад, команда
МуFile >> text;
Зчитає одне дане з початку файлу MyText.txt до першого пропуску чи до символу „кінець рядка" у змінну text. Якщо треба зчитати наступне дане (яке розміщене між першим і другим пропусками), необхідно повторити попередню команду, тобто записати команди MyFile >> text; MyFile>>text1; або використати коминду MyFile>>text>>text1;.
Отже, зчитати дані з файлу можна за допомогою команди:
<назва файлової змінної> >> <змінна 1> >> <змінна 2> >> ... >> <змінна N>
Після опрацювання файлу його потрібно закрити. Це роблять так:
<назва файлової змінної>.close()
Наприклад, MyFile. close (). Файл MyText.txt буде закрито. Після цього файлову змінну MyFile у разі потреби можна зв'язати з іншим файлом на диску.
Визначити кінець файлу можна за допомогою функції eof (eof – end of file, кінець файлу) так:
<назва файлової змінної>.eof()
Ця функція повертає нульове значення, якщо досягнуто кінця файлу.
Приклад 2. Нехай у деякому текстовому редакторі створено файли text1.dat і text2.dat. Послідовно зчитаємо з них дані та виведемо їх уміст на екран.
#include < ifsteram.h > // Виведення інформації із файлів
Void main()
{
ifsteram File1 (“text1.dat”);
// Поки не досягнуто кінця файлу іехН.сіаі
wile (!File1. eof()) // Знак! означає операцію не
{
// Надаємо місце в пам'яті для зчитуваного даного
char *t = new char[30]; // до ЗО символів
File1 >> t; // Зчитуємо дане з файлу
Cout << t << “\n”; // Виводимо це дане на екран
Delet [] t; // Вивільняємо пам'ять
}
// Повертаємось на початок команди мпііе
File1.close(); // коли досягнуто кінця файлу, закриваємо його
File1.ореn(“text2.dat”); // Відкриваємо файл (ехі2.сІа( для читання
wile (!File1. eof()) // Поки не досягнуто кінця файлу
{
char *t = new char[30];
File1 >>t;
Cout << t << “\n”;
Delet [] t;
}
File1.close()
}
Детальніше про команду while див. у § 9. Оскільки у програмі виділяється пам'ять відразу для 30 символів, то використовуємо команду Delet [] (див. § 12).
2. Виведення даних у файл. Відкрити файл для запитання у нього даних можна так:
оsteram <назва файлової змінної> (<зовнішня назва>,ознака1 | ознака2 | ... | ознака N)
або так:
оsteram <назва файлової змінної>; <назва файлової змінної>.ореn(<зовнішня назва>);
Дія команд. Підключаємо потік виведення у файл і налагоджуємо зв'язок між файловою змінною у програмі та файлом на зовнішньому носії. Ознаки зазначати не обов'язково.
Приклад 3. Відкрити файл MyText.txt для запису у нього даних можна так (тут FileForZap - файлова змінна):
osteram FileForZap ("MyText.txt ");
або так:
ifsteram FileForZap; FileForZap. ореn ("MyText.txt ");
Щоб занести дані у файл, використовують команду виведення даних <<. Наприклад, після виконання команд
Int n = 10; FileForZap << n;
у файл MyText.txt буде занесено число 10. Занести декілька даних у файл можна так само, як і вивести їх на екран: використовуючи стандартні правила команди << та керуючі послідовності.
Отже, записати дані у файл можна так:
<назва файлової змінної> << <змінна 1 > << <змінна 2> << ... << <змінна N>
3. Ознаки. Ознаки слугують для зміни правил доступу до файлу. Розглянемо деякі з них:
Приклад 4. Після оголошення
Ofstream Flags (“text1.dat”, ios::app, ios::noreplace);
можна дописати до кінця вже існуючого файлу text1.dat потрібну інформацію. Якщо ж оголосити потік Flags так:
Ofstream Flags (“text1.dat”, ios::noreplace);
і спробувати щось записати у файл, то жодних дій не відбудеться, оскільки ознака ios::noreplace забороняє змінювати існуючий файл. Проте якщо цю ознаку застосувати до нового файлу, якого ще немає на диску, наприклад, записати
Ofstream Flags (“text3.dat”, ios::noreplace);
то буде створено файл text3.dat, в який можна буде заносити дані.
Якщо потік оголосити так:
Ofstream Flags (“text4.dat”, ios::nocreate);
то можливі два варіанти. Якщо файл text4.dat; вже існує, то він може бути відкритий для записування даних. Якщо ж раніше такого файлу на диску не було, то в кращому випадку у файл нічого не запишеться, а в гіршому - програма зависне.
Задача 1 (про змагання спортсменів). Нехай необхідно занести у файл прізвища та результати трьох переможців змагань із фігурного катання. Вивести вміст файлу на екран для візуального контролю.
// Програма Спорт
#include < ifsteram.h >
Void main()
{
// Відкриємо файл для записування
ofstream File1(“sport.txt”);
char name[15];
float bal;
cout << "Уведіть прізвище та результат першого спортсмена\n";
cin >> name >> bal;
File1 << name << “\t” <<bal <”\n”; // Записуємо дані у файл
cout << "Уведіть прізвище та результат другого спортсмена\n";
cin >> name >> bal;
File1 << name << “\t” <<bal <”\n”; // Записуємо дані у файл
cout << "Уведіть прізвище та результат третього спортсмена\n";
cin >> name >> bal;
File1 << name << “\t” <<bal <”\n”;
File1.close(); // Закриваємо файл
Cout << "Виведемо вміст файлу\n";
Ifstream File2(“sport.txt”);;
Cout << "Перше місце \t;
File2 >> name >> bal; // Зчитуємо дані з файла
Cout << name << “\t” << bal <<”\n”;
Cout << "друге місце \t;
File2 >> name >> bal;
Cout << name << “\t” << bal <<”\n”;
Cout << "Третє місце \t;
File2 >> name >> bal;
Cout << name << “\t” << bal <<”\n”;
}
Вправи
Модифікуйте програму Спорт так, щоб записати у файл прізвище, місце та результат спортсмена. Зчитайте інформацію з файлу та виведіть її на екран для контролю.
У текстовому редакторі створіть файл druzi.txt;, у який занесіть прізвища п'яти ваших друзів. Складіть програму, яка б додавала інформацію ще про трьох осіб і результати записувала у файл druzi1.txt. Виведіть уміст файлів druzi.txt і druzi1.txt на екран.
У текстовому редакторі створіть файл, у який занесіть координати вершин трикутника. Розв'яжіть задачу № 2 вашого варіанта, використовуючи утворений файл. Результати виведіть на екран і у файл.
