Как читать строки за строкой или весь текстовый файл сразу?
Я участвую в учебнике, в котором представлены файлы (как читать и писать из\в файл).
Прежде всего, это не домашнее задание, это просто общая помощь, которую я ищу.
Я знаю, как читать одно слово за раз, но я не знаю, как читать по одной строке за раз или как читать весь текстовый файл.
Что делать, если мой файл содержит 1000 слов? Невозможно прочитать каждое слово.
Мой текстовый файл с именем (Read) содержит следующее:
Я люблю играть в игры
я люблю читать
У меня есть 2 книги
Это то, что я сделал до сих пор:
#include <iostream>
#include <fstream>
using namespace std;
int main (){
ifstream inFile;
inFile.open("Read.txt");
inFile >>
Есть ли какой-либо возможный способ сразу прочитать весь файл, вместо того, чтобы читать каждую строку или каждое слово отдельно?
Ответы
Ответ 1
Вы можете использовать std::getline
:
#include <fstream>
#include <string>
int main()
{
std::ifstream file("Read.txt");
std::string str;
while (std::getline(file, str))
{
// Process str
}
}
Также обратите внимание, что лучше всего просто создать поток файлов с именами файлов в нем, а не явно открывать (то же самое касается закрытия, просто дайте деструктору выполнить работу).
Дополнительная документация о std::string::getline()
может быть прочитана в Ссылка CPP.
Вероятно, самый простой способ прочитать весь текстовый файл - это просто конкатенация полученных строк.
std::ifstream file("Read.txt");
std::string str;
std::string file_contents;
while (std::getline(file, str))
{
file_contents += str;
file_contents.push_back('\n');
}
Ответ 2
Я знаю, что это действительно действительно старый поток, но я хотел бы также указать другой способ, который на самом деле очень простой... Это пример кода:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream file("filename.txt");
string content;
while(file >> content) {
cout << content << ' ';
}
return 0;
}
Ответ 3
Я думаю, вы могли бы использовать функцию istream.read(). Вы можете просто заколебаться с разумным размером куска и напрямую прочитать буфер памяти, а затем добавить его в какой-то произвольный контейнер памяти (например, std::vector). Я мог бы написать пример, но я сомневаюсь, что вы хотите получить полное решение; сообщите мне, если вам понадобится дополнительная информация.
Ответ 4
Ну, для этого также можно использовать функцию freopen, предоставленную в С++, http://www.cplusplus.com/reference/cstdio/freopen/ и читать файл по строкам как следует -:
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
freopen("path to file", "rb", stdin);
string line;
while(getline(cin, line))
cout << line << endl;
return 0;
}
Ответ 5
Другой метод, который еще не упоминался, std::vector
.
std::vector<std::string> line;
while(file >> mystr)
{
line.push_back(mystr);
}
Затем вы можете просто перебрать вектор и изменить/извлечь то, что вам нужно/