Добавил:
t.me Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 семестр / Работа с текстовыми файлами.pptx
Скачиваний:
8
Добавлен:
26.02.2023
Размер:
116.69 Кб
Скачать

Тест для проверки набрали в блокноте

Исходный файл содержал ivanov

25 petrov 21 sidorova 22

Результирующий файл ivanov 25 petrov 21 sidorova 22

По умолчанию файлы открываются и создаются как текстовые.

Пример 2 Программа, которая читает файл с именем in_file и выводит все прочитанные из этого файла слова, разделяя их пробелом, в другой файл, названный out_file. (предварительно надо подготовить исходный файл строк in_file в той же папке, где буде эта программа). Чтение строк.

#include <iostream>

#include <fstream> //для работы с файлами #include <string>

using namespace std; int main()

{

ifstream infile("in_file.txt"); ofstream outfile("out_file.txt");

if ( !infile ) { cout << "Ошибка открытия входного файла.\n"; return -1; }

if ( !outfile ) {

cout << "Ошибка открытия выходного файла.\n"; return -2; } string word;//строка для ввода в память

while ( infile >> word ) outfile << word << ' '; //разделение пробелом in_file.close(); out_file.close();

return 0;}

//Здесь осуществляется ввод из файла, пока не получим конец файла, тогда //возвращается 0

Другие способы чтения из текстового потока

Чтение до разделителя функцией getline (input,куда читать,разделитель);

В качестве разделителя может выступать символ «минус». Считаем дату из следующего текстового файла date.txt:

2017−01−25 --- набрали ,например в блокноте и сохранили как date.txt

создадим:

ifstream input("date.txt");

Объявим

string year, month, day;

Читаем файл таким образом, чтобы соответствующие части файла попали в нужную переменную. Воспользуемся функцией getline

getline(input, year, '-'); getline(input, month, '-'); getline(input, day, '-');

Чтобы проверить, что все работает, выведем каждую переменную на экран через пробел: cout << year << ' ' << month << ' ' << day << endl;

Функция getline

Чтение из потока производится с помощью оператора ввода ( ) или функции getline, которая позволяет читать данные из потока построчно

Функция getline первым аргументом принимает поток, из которого нужно прочитать данные, а вторым — переменную, в которую их надо записать.

•getline возвращает ссылку на поток, из которого берет данные. Поток можно привести к типу bool, причем false будет в случае, когда с потоком уже можно дальше не работать.

•Переписать код так, чтобы он выводил все строчки из файла и ничего лишнего, можно так:

ifstream input(“my .txt");

string line;

while (getline(input, line)) { cout << line << endl; }

Функция getline

Обратите внимание, что переводы строки при выводе добавлены искусственно. Это связано с тем, что функция getline, на

самом деле, считывает данные до некоторого разделителя, причем по

умолчанию до символа перевода строки, который в считанную строку не

попадает!

Обработка случая, когда указанного файла не существует

Cитуация, когда по некоторым причинам неверно указано имя файла или файла с таким именем не может существовать в файловой системе. Например, набрали неверно имя файла

При запуске такого кода оказывается, что он работает, ничего не выво- дит, но никак не сигнализирует о наличии ошибки.

Желательно, чтобы программа не умалчивала об этом, а явно сообщала, что файла не существует и из него нельзя прочитать данные.

У файловых потоков существует метод is_open, который возвращает true, если файловый поток открыт и готов работать

Проверка на наличие файла (is_open)

1. Вариант

ifstream input("helol.txt"); string line;

if (input.is_open()){

while (getline(input, line)) { cout << line << endl; }

else { cout << "error!" << endl; }

файловые потоки можно приводить к типу bool, где значение true соответствует тому, что с потоком можно работать в данный момент.

if (input){

while (getline(input, line)) { cout << line << endl; }

else { cout << "error!" << endl; }

Функция, которая считывает заданный по имени файл

void Input_file(const string name)

{

ifstream input(name); if (input) {

string line;

while (getline(input, line))

{

cout << line << endl;

} } }

Кроме построчного чтения для работы с текстовыми файлами возможно посимвольное чтение из файла используются функции put() и get()

Посимвольное чтение из файла с функцией

#include <fstream> #include <stdlib.h> #include <iostream> using namespace std; int main(void){ //прототип

void two_space(ifstream& f ,ofstream& t);//используем функцию, два файла ifstream f_in("my_fil.txt");//связали с физическим файлом

ofstream f_out("my1.txt"); if(!f_in){

cout<<"file not open"<<endl;exit(1);} if(!f_out){

cout<<"file not open"<<endl; exit(1);} two_space(f_in,f_out);// обращение к функции f_in.close();//закрыли файлы после работы сними f_out.close();

return 0;

}

Описание функции two_space (чтение и запись символов в файл)

void two_space(ifstream& f,ofstream& t){ char c;

//функция get(c) для чтения символов из файла while(f.get(c)){

t.put(c);//функция для записи символов put(c) if(c=='\n')

t.put(c);//переход на другую строку пишем в //файл

}

}