- •Работа с текстовыми файлами
- •ФАЙЛ – это именованный набор данных, хранящийся на внешней памяти.
- •Курсор доступа для бинарных файлов
- •Основные операции работы с файлами (1)
- •Основные операции работы с файлами(2)
- •Операторы записи в поток-текстовые файлы.
- •Пример 1(текстовые файлы)
- •Продолжение –запись в файл
- •Продолжение 2-чтение из файла
- •Тест для проверки набрали в блокноте
- •Пример 2 Программа, которая читает файл с именем in_file и выводит все прочитанные
- •Другие способы чтения из текстового потока
- •Функция getline
- •Функция getline
- •Обработка случая, когда указанного файла не существует
- •Проверка на наличие файла (is_open)
- •Функция, которая считывает заданный по имени файл
- •Посимвольное чтение из файла с функцией
- •Описание функции two_space (чтение и запись символов в файл)
- •Функция дозаписи в файл
- •Пример 3 Добавление в текстовый файл
- •Добавление в файл строк -appendTextFile
- •Главная программа
- •Исходный и результирующий файлы
- •Пояснения 1
- •Пояснения 2
- •Пример 4.Текстовые файлы
- •Продолжение примера
- •Пояснения 1
- •Пояснения 2
- •Пример5. Написать программу, подсчитывающую общее количество символов count в текстовом файле. Предварительно файл
- •ПОЯСНЕНИЯ:
- •Пример6 . Написать программу, выполняющую несколько способов
- •Эти функции были рассмотрены раньше в других примерах
- •//Главная функция
- •case '2':
- •Пояснения
Пояснения 2
Далее открывается файл для чтения в текстовом режиме. ifstream fin(filename);
Поскольку в задаче не требуется разбирать и анализировать содержимое текстового файла, самый простой способ прочитать его - посимвольно. При этом используется не операция >>, а функция посимвольного ввода get(char&)).
Это связано с тем, что операция >> игнорирует пробельные (служебные) символы, а функция get(char&) считывает и сохраняет в параметре любой символ, даже если это пробел, символ табуляции или символ новой строки.
При этом, если считан символ, то функция возвращает значение true, при
достижении конца файла функция возвратит значение false. Это позволяет использовать вызов в условии цикла
while(fin.get(ch)) cout<<ch;
Пример5. Написать программу, подсчитывающую общее количество символов count в текстовом файле. Предварительно файл создается в текстовом редакторе
#include <iostream> #include <fstream> #include <stdlib.h> using namespace std; int main() {
ifstream fin;// файловая переменная
long count;//переменная для подсчета символов в файле char ch;
fin.open("my1.txt");//связь с физическим файлом if (!fin){
cout<<" not open file "<< "my1.txt" << endl; exit(1);}
count = 0;
while (fin.get(ch)) count++;
cout<<count<< " in "<< "me1.txt"<<"\n"; fin.close();
return 0;}
ПОЯСНЕНИЯ:
Функция exit(1) приводит к нормальному завершению программы.
Значение параметра функции передается операционной системе. Значение 0 означает успешное завершение программы, а отличное от 0 может интерпретироваться как код ошибки. Далее ошибка может быть обработана.
Для работы с файлами в программе создана переменная типа ifstream. В отличие от предыдущего примера, созданный объект не связан ни с каким файлом. Для связи и открытия файла в нужном режиме используется метод open(): fin.open( имя файла);
Считывание файла идет посимвольно и вычисляется общее количество символов.
Пример6 . Написать программу, выполняющую несколько способов
обработки текстовых файлов (вывод содержимого на экран void echoFile , создание копии файла copyTextFile), которые реализованы в виде функций. Для выбора программы используется меню.
#include <iostream> #include <fstream> #include <stdlib.h> using namespace std;
//Функция вывода любого текстового файла на экран пример уже был void echoFile (char* fileName) {
ifstream inFile(fileName); if (!inFile) {
cout<<"Can't open "<<fileName<<"\n"; exit(1) ;
}
char c;
while (inFile.get(c)) cout<<c; cout<<endl; inFile.close();
}
Эти функции были рассмотрены раньше в других примерах
//функция копирование файла
void copyTextFile(char* inName, char* outName) { char c;
ifstream inFile(inName); if (! inFile) {
cout<<"Can't open "<<inName<<"\n"; exit(2) ;
}
//функция вывода ofstream outFile(outName); while (inFile.get(c)) outFile<<c;
inFile.close();
outFile.close();}
//Главная функция |
|
int main() { |
|
char n, name[20],name1[20]; |
//для имен файла |
do { |
//реализация меню |
cout<<"1. Echo text file \n"; |
|
cout<<"2. Copy text file \n"; |
|
cin>>n; |
|
if ((n>'0')&&(n<‘3')) { |
// ввод выбора |
switch (n) { |
|
case '1': |
|
cout<<"File name ->"; |
|
cin>>name; |
|
echoFile (name); |
|
break; |
|
case '2': |
//ввод имен исходного файла и для копирования |
cout<<"File name ->"; |
|
cin>>name; |
|
cout<<"Copy name ->"; |
|
cin>>name1; |
|
copyTextFile(name,name1); |
//вызов функции копирования файлов |
echoFile(name1); |
//печать результата копирования |
break; |
|
default:{ |
|
cout<<"Error number \n"; |
|
} |
|
} |
|
}} |
|
while (n!=‘3’); |
// конец цикла do |
return 0; |
|
} |
|
Пояснения
Приведенные в программе функции void echoFile (char* fileName)
void copyTextFile(char* inName, char* outName)организованы так же, как и в предыдущих примерах. Входными параметрами для них являются имена файлов.