Работа с файлами Для работы с файлами в стандартной библиотеке определен заголовочный файл fstream



бет2/2
Дата20.08.2022
өлшемі136,44 Kb.
#38195
1   2
Чтение и запись текстовых файлов
Потоки для работы с текстовыми файлами представляют объекты, для которых не задан режим открытия ios::binary.

Запись в файл


Для записи в файл к объекту ofstream или fstream применяется оператор << (как и при выводе на консоль):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

#include
#include
int main()
{
std::ofstream out; // поток для записи
out.open("D:\\hello.txt"); // окрываем файл для записи
if (out.is_open())
{
out << "Hello World!" << std::endl;
}
std::cout << "End of program" << std::endl;
return 0;
}

Данный способ перезаписывает файл заново. Если надо дозаписать текст в конец файла, то для открытия файла нужно использовать режим ios::app:

1
2
3
4
5
6

std::ofstream out("D:\\hello.txt", std::ios::app);
if (out.is_open())
{
out << "Welcome to CPP" << std::endl;
}
out.close();

Чтение из файла


Если надо считать всю строку целиком или даже все строки из файла, то лучше использовать встроенную функцию getline(), которая принимает поток для чтения и переменную, в которую надо считать текст:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

#include
#include
#include
int main()
{
std::string line;
std::ifstream in("D:\\hello.txt"); // окрываем файл для чтения
if (in.is_open())
{
while (getline(in, line))
{
std::cout << line << std::endl;
}
}
in.close(); // закрываем файл
std::cout << "End of program" << std::endl;
return 0;
}

Также для чтения данных из файла для объектов ifstream и fstream может применяться оператор >> (также как и при чтении с консоли):
#include
#include
#include
struct Operation
{
int sum; // купленная сумма
double rate; // по какому курсу
Operation(double s, double r) : sum(s), rate(r)
{}
};
int main()
{
std::vector operations = {
Operation(120, 57.7),
Operation(1030, 57.4),
Operation(980, 58.5),
Operation(560, 57.2)
};
std::ofstream out("D:\\operations.txt");
if (out.is_open())
{
for (int i = 0; i < operations.size(); i++)
{
out << operations[i].sum << " " << operations[i].rate << std::endl;
}
}
out.close();
std::vector new_operations;
double rate;
int sum;
std::ifstream in("D:\\operations.txt"); // окрываем файл для чтения
if (in.is_open())
{
while (in >> sum >> rate)
{
new_operations.push_back(Operation(sum, rate));
}
}
in.close();
for (int i = 0; i < new_operations.size(); i++)
{
std::cout << new_operations[i].sum << " - " << new_operations[i].rate << std::endl;
}
return 0;
}
Здесь вектор структур Operation записывается в файл.

1
2
3
4

for (int i = 0; i < operations.size(); i++)
{
out << operations[i].sum << " " << operations[i].rate << std::endl;
}

При записи в данном случае будет создаваться файл в формате

1
2
3
4

120 57.7
1030 57.4
980 58.5
560 57.2

Используя оператор >>, можно считать последовательно данные в переменные sum и rate и ими инициализировать структуру.

1
2
3
4

while (in >> sum >> rate)
{
new_operations.push_back(Operation(sum, rate));
}


Задание (выполнить 2 задания по варианту):
1. Считать цифры с файла и определить сколько в файле отрицательных чисел
2. Прочитать словосочетание с файла и вывести в консоле слова более 6 символов
3. Считать цифры с файла и найти их арифметическое среднее, добавив это число в конец файла
4. Прочитать с файла словосочетание и вывести в консоле его в обратном порядке
5. Определить количество слов в файле
6. Прочитать данные с файла и определить в нем количество запятых


Достарыңызбен бөлісу:
1   2




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет