Файл – это поименованная часть памяти диска, которая содержит некоторый набор записей [32]. В С++ средства для доступа к файлам объявлены в заголовочном файле fstream, которыйнеобходимо включить в программный код при работе с файлами.Для обозначенияисточника либо приемника данных применяется термин «поток». Потоки для работы с файлами создаются как объекты следующих классов:
§ ofstream – для вывода (записи) данных в файл;
§ ifstream – для ввода (чтения) данных из файла;
§ fstream – для чтения и записи данных (двунаправленный обмен).
Имя файла задается либо при создании объекта, либо при использовании метода open(). В качестве примера рассмотрим пример с двойной сортировкой (см. листинг 5.2), но информацию нужно получать из файла.
Листинг 6.1. В текстовом файле «input.txt» записана следующая информация: число студентов, а затем идут парой фамилия и номер группы (рис. 6.1). Необходимо преобразовать этот список так, чтобы он оказался отсортированным по группам и внутри каждой группы в алфавитном порядке. Полученный список вывести на экран дисплея и записать в файл.
//L6_1.cpp
#include <string.h>
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_CTYPE,"russian");
int n,i,*grup,f,k=0,gtmp;
char**name,*ntmp,fam[30];
fstream ff("input.txt"); // Соэдание объекта ff и открытие файла
ff>>n;
name=new char*[n]; // Выделение памяти для указателей,
// связанных с фамилией студентов.
grup=new int[n]; // Выделение памяти под номера групп
for(i=0;i<n;i++)
{
ff>>fam>>grup[i];
name[i]=strdup(fam); // Заполняется фамилия i-го студента
}
ff.close(); // Закрытие файла
... // См. листинг 5.2
ff.open("input.txt",ios::app); // Открытие файла для пополнения
ff<<"\nПолученный список\n";
for(i=0;i<n;i++)
{
ff.width(6);
ff<<grup[i]<<" ";
ff<<name[i]<<'\n';
}
ff.close(); // Закрытие файла
return 0;
}
Содержимое файла “input.txt”
Рис. 6.1. Информация, находящаяся в файле «input.txt»
На рис. 6.2 приведен результат выполнения программы листинга 6.1.
Рис. 6.2. Результат работы программы листинга 6.1