Текстовые файлы представляют собой последовательность строк различной длины, каждая из которых заканчивается меткой EOLn – End Of Line – конец строки (последовательность символов #13#10). В конце файла стоит метка EOF – End Of File.
Запись данных в текстовый файл практически не отличается от вывода данных на экран терминала. Чтение же данных из текстового файла имеет свои особенности.
Объявляется текстовый файл указателем на него:
FILE *f;
где f – указатель на файл – имя логического файла (файловая переменная),
FILE – служебное слово – только заглавными буквами!
Перед началом работы с файлом необходимо связать имя логического файла (файловую переменную) с соответствующим ему физическим файлом на внешнем носителе – открыть файл:
f=fopen(“путь”, “режим”);
где путь – полный путь к файлу на внешнем носителе,
режим – режим открытия файла:
r – чтение (read),
w – запись (write),
a – добавление в конец файла (append),
r+ – чтение с обновлением (r + w),
w+ – запись с обновлением,
a+ – добавление с обновлением.
FILE *f_text;
f_text=fopen(“D:/User/my_file.txt”, “w”); // по указанному // пути создан текстовый файл // my_file.txt и открыт // для записи
Если файл с таким именем уже существовал, то он очищается (из него удаляется информация).
Форматная запись (вывод) в файл осуществляется функцией:
fprintf(указатель на файл, формат вывода, список вывода);
Пример 1: записать в файл my_file.txt построчно значения элементов следующего массива mass34 :
1 2 3 4
5 6 7 8
9 10 11 12
Программа
const int n=3;
const int m=4;
const int k=m*m;
int i, j;
int mass[n][m]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int vector[k];
FILE *f_text;
f_text=fopen(“D:/User/my_file.txt”, “w”); // файл открыт // для записи
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
fprintf(f_text, “%5d”, mass[i][j]);
fprintf(f_text, “\n”);
}
fclose(f_text); // после записифайл обязательно закрыть!
Структура файла my_file.txt:
1 2 3 4
5 6 7 8
9 10 11 12
Внимание! При записи чисел в текстовый файл оставлять между ними хотя бы по одному пробелу!
Перед чтением данных из файла его необходимо открыть для чтения:
f=fopen(“путь”, “r”);
Если файл не найден, то значение указателя f будет равно NULL.
Форматированное чтение (ввод) из файла осуществляется функцией:
fscanf(указатель на файл, формат ввода, список ввода);
Прочитаем созданный файл и запишем числа в вектор vector16:
f_text=fopen(“D:/User/my_file.txt”, “r”); // файл открыт // для чтения
for (i=0; i<k; i++) // обнуляем вектор
vector[i]=0;
i=0; // индекс очередного элемента
while (!feof(f_text)) // пока не конец файла
{
fscanf(f_text, “%d”, &j); // читаем из него данные
vector[i]=j; // и записываем в вектор
i++;
}
printf("\nVector_1:\n");
for (i=0; i<k; i++)
printf("%4d", vector[i]);
printf("\n");
На экран будет выведено:
Vector_1:
1 2 3 4 5 6 7 8 9 10 11 12 0 0 0 0
Добавим в последнюю строку файла последовательность чисел 4, 3, 2, 1:
f_text=fopen(“D:/User/my_file.txt”, “a”); // файл открыт // для добавления
for (i=4; i>0; i--)
fprintf(f_text, “%5d”, i);
fprintf(f_text, “\n”);
fclose(f_text); //после записифайл обязательно закрыть!
Структура файла my_file.txt:
1 2 3 4
5 6 7 8
9 10 11 12
4 3 2 1
Снова прочитаем созданный файл и запишем числа в вектор vector16:
f_text=fopen(“D:/User/my_file.txt”, “r”); // файл открыт // для чтения
for (i=0; i<k; i++) // обнуляем вектор
vector[i]=0;
i=0; // индекс очередного элемента
while (!feof(f_text)) // пока не конец файла
{
fscanf(f_text, “%d”, &j); // читаем из него данные
vector[i]=j; // и записываем в вектор
i++;
}
printf("\nVector_2:\n");
for (i=0; i<k; i++)
printf("%4d", vector[i]);
printf("\n");
На экран будет выведено:
Vector_2:
1 2 3 4 5 6 7 8 9 10 11 12 4 3 2 1
Пример 3: создать базу данных на текстовом файле my_base.txt – в каждой его строке записать следующие данные о студентах:
группа – строка длиной 10 символов,
фамилия – строка длиной 20 символов,
имя – строка длиной 10 символов,
средний балл сессии – вещественное число,
оценка по информатике – целое число.
Опишем исходные данные:
char gruppa[10];
char fam[20];
char name[10];
float sr_ball;
int ocenka;
Создадим текстовый файл my_base.txt и откроем его для записи:
FILE *f_base; // указатель на создаваемый файл
f_base=fopen(“D:/User/my_base.txt”, “w”);
Данные в базу будем вводить циклом с постусловием. Интерфейс программы: