{ double x,y;
ifstream fa("A.dat");
ofstream fb("B.dat");
for (;;) { fa >> x >> y;// із файла fa зчитуються // послідовно x,y
if (fa.eof()) break;
fb << x << " " << y << endl;
// у файл fb записуються значення x, рядок // пробілів, y, символ EOL
}
}
Читання й запис окремих символів
Посимвольне читання й запис може здійснюватися функціями потоків get та put, які мають по кілька модифікацій. Нижче наведений приклад програми, що виводить на екран текстовий файл, заданий у командному рядку.
// Приклад 2
#include <fstream.h>
#include <syst.h>
void main(int N, char** fnam)
{ ifstream fs(fnam[1]);
if (fs==0) { puts("Файл не знайдений!"); exit(0); }
while (!fs.eof())
cout << (char)fs.get();
// зчитування з файлу і виведення на екран // наступного символу
}
У цій програмі для контролю досягнення кінця файлу використана функція ifstream::eof(). У зв'язку з тим, що функція ifstream::get() повертає значення типу int, у програмі застосовано операцію перетворення типу (char).
Якщо зв'язування потоку fs з файлом fnam[1] не закінчилося успішно, потокова змінна fs одержує значення NULL. Це дає можливість здійснювати контроль успішності відкриття файлу.
Замість функції ifstream::get() можна застосувати функцію ifstream::get(x), вона добутий символ привласнює змінній x. Передостанній рядок програми у такому разі запишеться таким чином:
while (!fs.eof()) { fs.get(x); cout<<x; }
Розглянемо приклад програми, яка копіює інформацію з одного файлу в іншій. Для запуску програми використовується командний рядок з параметрами. Через них передаються імена вхідного і вихідного файлів. Якщо ім'я файлу-приймача в командному рядку не зазначено, інформація копіюється на екран.
// Приклад 3
#include <fstream.h>
void main(int N, char** f)
{ char x;
ifstream fa(f[1]);
if (N==2) while (fa.get(x)) cout<<x;
if (N==3) { ofstream fb(f[2]);
while (fa.get(x)) fb.put(x); }
}
У цій програмі застосована така властивість функції ifstream::get(x): якщо читання символу не завершується успішно (наприклад, коли файл уже прочитаний до кінця), вона повертає значення 0. Це застосовано для контролю завершення циклу while.
Читання й запис рядка символів
Для читання й запису рядка символів заданої довжини передбачені функції потоків ifstream::getline(s, len, els) і ofstream::write(s, len). Параметри функцій: s - ім'я об'єкта-приймача або об'єкта-джерела, len - кількість символів, що передаються, els - символ кінця рядка (його можна не вказувати, по умовчанню він є символом '\n').
Нижче наводиться приклад програми, що копіює текстовий файл, вказаний у командному рядку, на екран із застосуванням функції зчитування рядка ifstream::getline.
// Приклад 4
#include <fstream.h>
void main(int N, char** fnam)
{ ifstream fs(fnam[1]);
char buf[255];
while (!fs.eof()) { fs.getline(buf,sizeof(buf));
cout << buf << endl;
}
}
Якщо потрібно прочитати з потоку рядок і відправити його не в масив типу char, а привласнити змінній типу string, можна скористатися функцією getline з модуля <syst.h>. Ознайомтесь з програмою, яка копіює вміст текстового файлу-потоку на екран. У програмі використана функція getline з модуля syst.h . Якщо досягнуто кінець файлу, ця функція повертає 0 (false).
// Приклад 5
#include <syst.h>