Розглянемо на конкретних прикладах — від простого до більш складного — обробку файлів, що містять дані — масиви.
Приклад 16.1. Потрібно записати у файл з ім’ям «filel.dat» 10 дійсних чисел, створити з цих чисел масив.
Для цього треба кожне число спочатку ввести з клавіатури в оперативну пам’ять комп’ютера, а потім записати його у файл. Для введення скористаємося функцією InputBox(). Розташуємо на формі дві кнопки: одну — типу Button — для ініціювання команди «Ввод», іншу — типу BitBtn з написом «Close» — для закінчення роботи додатка. Вигляд форми, вікна введення і програмного коду наведено нижче:

С++: Розв’язання задач з файлами
#include <vcl.h>
#pragma hdrstop
#include <Dialogs.hpp>
#include <fstream.h>
#include "UnFile.h"
//--------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------
_ fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//--------------------------------------------------------------
void _fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString p;
int i;
ofstream fp("d:\\Users\\Dat_base\\filel.dat");
if (!fp)
{
ShowMessage("Файл не открыт");
return;
}
for (ї=1; і <= 10; i++)
{
// ввод в ОЗУ с помощью клавиатуры очередного числа
р=ІnрutВох("Ввод чисел","Введите "+IntToStr(i)+" число"," ");
fp << StrToFloat(p)<<' '; // запись числа из ОЗУ в файл
}
fp.close();
}
У заголовні файли програмного коду треба включити два файли: #include <Dialogs.hpp> і #include <fstream.h>. Перший з них забезпечує доступ до функції InputBox(), а другий — містить засоби роботи з файлами.
Ім’я створюваного файла з урахуванням шляху має вигляд:
“d:\\Users\\Dat_base\\file.dat”.
Конструктор ofstream() створює потік з ім’ям fp для запису даних у файл, що і використовується в циклі for. Оператор if у цій програмі служить для визначення виконання операції відкриття файла. Якщо ця операція з якихось причин не виконалася, у вікні ShowMessage() буде виведено повідомлення: «Файл не открыт», і оброблювач припинить подальшу роботу. У протилежному випадку в папці «Dat_base», що створена у каталозі Users на диску D:, буде розташований файл з ім’ям “file1.dat“, у який запишеться 10 чисел.
Приклад 16.2. Із 10 дійсних чисел, що записані у файл з ім’ям «filel.dat» (розглянутий вище приклад 16.1), створити масив і відсортувати його за зростанням значень.
Для розв’язання поставленої задачі необхідно створити відповідний додаток.
Відкриємо нову форму і розмістимо на ній компоненти:
- Label1 — для виведення заголовка «Исходный массив»;
- Label2 — для виведення значень елементів масиву;
- Label3 — для виведення заголовка «Отсортированный массив»;
- Label4 — для виведення значень цього масиву;
- кнопку Button1 з написом «Выполнить» — для створення події читання файла в масив, його сортування і виведення;
- кнопку BitBtn2 з написом «Close» для закриття додатка.
Форма і додаток мають вигляд:

С++: Розв’язання задач з файлами
#include <vcl.h>
#pragma hdrstop
#include< fstream.h>
#include "Un_Read.h"
//----------------------------------------------------------------------------------------------------------------------
#pragma package(smartinit)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------------------------------
fastcall TForm1: :TForm1 (TComponent* Owner)
: TForm(Owner)
{
void_fastcall TForm1 ::Button1Click(TObject *Sender)
{
float mas [10]; // описание массива
int i=0;
ifstream inp("d:\\Users\\Dat_Base\\filel.dat"); //открытие файла
if (!mp)
{ ShowMessage("Файл не открывается");
return; }
Label2->Caption=""; // очистка поля ввода метки Label2
while(!inp.eof()) //цикл работает пока eof() имеет значение fake
{
inp>>mas[i]; // чтение чисел из файла в массив
//---------------------------------- вывод исходного массива
Label2->Caption=Label2->Caption+ FloatToStrF(mas[i],ffFixed,5,1)+" ";
i++;
}
inp.close();
//--------------------------------------- сортировка массива
for (int k = 0; k < 10-1; k++)
for (і = 0; і < 10-k-1; i++)
if (mas[i]>mas[i+l]) {
float buf=mas[i]; //запись элемента массива в переменную buf
mas[i] = mas[i+l];
mas[i+l] = buf;
}
//--------------------------- вывод отсортированного массива
Label4->Caption=" ";
for (і = 0; і < 10; i++)
Label4->Caption=Label4->Caption+ FloatToStrF(mas[i],ffFixed,5,1)+" ";
}
У додатку організація операції читання здійснюється оператором while(!inp.eof). Цей оператор забезпечує читання компонентів файла за допомогою потоку з ім’ям іnр у масив mas[ ] доти, поки не зустрінеться маркер кінця файла, тобто функція eof( ) не набуде значення «істина». Інші оператори зрозумілі з тексту програмного коду.
програмування