Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
glinskiymetodichka-s.doc
Скачиваний:
24
Добавлен:
15.08.2019
Размер:
2.7 Mб
Скачать

§ 7. Файли

Часто виникає потреба опрацьовувати інформацію, розміщену на зовнішніх носіях (на дисках), або виводити результати програми не на екран монітора, а у файл. Прикладами таких даних є інформація про розклад руху транспорту, успішність студентів, наявність товарів у магазинах, адреси, анкетні дані тощо.

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

числову інформацію.

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

. Тому для роботи з файлами насамперед необхідно почити саме цю бібліотеку.

Зауваження 1. У модулі fstream.h також містяться описи стандартних потоків cout і cin. Тому, щоб зчитати інформацію з файлу і вивести її на екран монітора, модуль iostream.h підключати не обов'язково.

Для опрацювання файлу його необхідно відкрити, виконати потрібні дії та закрити.

  1. Зчитування даних із файлу. Щоб зчитати вхідні дані з файлу, необхідно оголосити файлову змінну та відкрити файл читання так (розглянемо два способи):

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”;

}

Вправи

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

  2. У текстовому редакторі створіть файл druzi.txt;, у який занесіть прізвища п'яти ваших друзів. Складіть програму, яка б додавала інфор­мацію ще про трьох осіб і результати записувала у файл druzi1.txt. Виведіть уміст файлів druzi.txt і druzi1.txt на екран.

  3. У текстовому редакторі створіть файл, у який занесіть координа­ти вершин трикутника. Розв'яжіть задачу № 2 вашого варіанта, використовуючи утворений файл. Результати виведіть на екран і у файл.

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