Как правильно вывести результат работы программы в текстовый файл
Дали задание,нужно сделать прогу,которая делает работу с текстом,но не в этом суть,также нужно вывести 3 массива из программы в 3 отдельных файла,как это грамотно сделать?В обычные текстовые файлы,желательно простым методом.Плюс,лучше,чтобы файл сам создавался,а имя и путь был прописан в коде
Ответы (1 шт):
Автор решения: Smoliarick
→ Ссылка
В файл можно записать через потоковый ввод/вывод в файл (fstream).
Пример записи в файл:
- Создаем вектор из векторов для примера, там указаны строки для записи
- Далее создаем index, который будет указывать номер файла
- Проходим по созданному вектору из векторов и записываем каждый вектор в отдельный файл, для вас в данном случае интересна будет следующая часть:
std::ofstream output("output" + std::to_string(index) + ".txt", std::ios::app);
for (const std::string& line : item) {
output << line << std::endl;
}
output.close();
Здесь:
- std::ofstream(output("output" + std::to_string(index) + ".txt") - создаем поток для записи в файл с именем "output(заданный index).txt"
- std::ios::app - указывает, что мы дозаписываем в конец файла, а не создаем новый при записи
- output << line << std::endl; - записываем в файл строку из вектора, в котором сейчас находимся и добавляем в конце перенос строки
- output.close(); закрываем поток, чтобы при переходе на следующий вектор мы создали новый поток для другого файла
Полный пример программы:
Создает 3 файла (output1.txt, output2.txt, output3.txt), в который лежат строки из (v[0], v[1], v[2]) соответственно. Файл создается автоматически.
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
int main() {
std::vector<std::vector<std::string>> v = {
{ "V1Line1", "V1Line2", "V1Line3" },
{ "V2Line1", "V2Line2", "V2Line3" },
{ "V3Line1", "V3Line2", "V3Line3" }
};
int index = 0;
for (const std::vector<std::string> item : v) {
std::ofstream output("output" + std::to_string(index) + ".txt", std::ios::app);
for (const std::string& line : item) {
output << line << std::endl;
}
output.close();
index++;
}
return 0;
}