Я нахожусь в учебнике, который знакомит с файлами (как читать и писать из \ в файл)
Прежде всего, это не домашнее задание, это просто общая помощь, которую я ищу.
Я знаю, как читать по одному слову за раз, но я не знаю, как читать по одной строке за раз или как читать весь текстовый файл.
Что делать, если мой файл содержит 1000 слов? Читать каждое слово непрактично.
Мой текстовый файл с именем (Read) содержит следующее:
Я люблю играть в игры люблю читать у меня есть 2 книги
Вот чего я добился до сих пор:
#include <iostream>
#include <fstream>
using namespace std;
int main (){
ifstream inFile;
inFile.open("Read.txt");
inFile >>
Есть ли способ прочитать весь файл сразу, вместо того, чтобы читать каждую строку или каждое слово отдельно?
Ответы:
Вы можете использовать
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'); }
источник
while(getline(f, line)) { ...}
это рекомендуемый способ сделать это. Это объясняется здесь: gehrcke.de/2011/06/… --- там вы также найдете полезные подходы для правильной обработки ошибок.#include <iostream>
#include <iostream>
нужно? Мне кажется, что<fstream>
и этого<string>
достаточно. Если вы имеете в видуstd::getline
, это внутри<string>
, а не внутри<iostream>
.Я знаю, что это действительно очень старый поток, но я хотел бы также указать другой способ, который на самом деле очень простой ... Это пример кода:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream file("filename.txt"); string content; while(file >> content) { cout << content << ' '; } return 0; }
источник
Я думаю, вы могли бы использовать функцию istream .read (). Вы можете просто выполнить цикл с разумным размером блока и прочитать его непосредственно в буфер памяти, а затем добавить его в какой-то произвольный контейнер памяти (например, std :: vector). Я мог бы написать пример, но сомневаюсь, что вам нужно полное решение; дайте мне знать, если вам понадобится дополнительная информация.
источник
Что ж, для этого можно также использовать функцию freopen, предоставленную в C ++ - 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; }
источник
Еще один метод, о котором еще не упоминалось - это
std::vector
.std::vector<std::string> line; while(file >> mystr) { line.push_back(mystr); }
Затем вы можете просто перебрать вектор и изменить / извлечь то, что вам нужно /
источник
vector
ненужный шаг. Вы можете перебратьifstream
использованиеstd::istream_iterator<std::string>(inFile)
.вы также можете использовать это, чтобы прочитать все строки в файле одну за другой, а затем распечатать i
#include <iostream> #include <fstream> using namespace std; bool check_file_is_empty ( ifstream& file){ return file.peek() == EOF ; } int main (){ string text[256]; int lineno ; ifstream file("text.txt"); int num = 0; while (!check_file_is_empty(file)) { getline(file , text[num]); num++; } for (int i = 0; i < num ; i++) { cout << "\nthis is the text in " << "line " << i+1 << " :: " << text[i] << endl ; } system("pause"); return 0; }
надеюсь, это может вам помочь :)
источник
привет, братан, это способ прочитать строку в точной строке с помощью этого кода
надеюсь, это может вам помочь!
#include <iostream> #include <fstream> using namespace std; int main (){ string text[1]; int lineno ; ifstream file("text.txt"); cout << "tell me which line of the file you want : " ; cin >> lineno ; for (int i = 0; i < lineno ; i++) { getline(file , text[0]); } cout << "\nthis is the text in which line you want befor :: " << text[0] << endl ; system("pause"); return 0; }
Удачи !
источник