Jestem w tutorialu, który wprowadza pliki (jak czytać i zapisywać z \ do pliku)
Po pierwsze, to nie jest praca domowa, to tylko ogólna pomoc, której szukam.
Wiem, jak czytać po jednym wyrazie, ale nie wiem, jak czytać po jednym wierszu na raz ani jak czytać cały plik tekstowy.
Co jeśli mój plik zawiera 1000 słów? Czytanie każdego słowa jest niepraktyczne.
Mój plik tekstowy o nazwie (Odczyt) zawiera następujące elementy:
Uwielbiam grać w gry Uwielbiam czytać Mam 2 książki
Oto, co osiągnąłem do tej pory:
#include <iostream>
#include <fstream>
using namespace std;
int main (){
ifstream inFile;
inFile.open("Read.txt");
inFile >>
Czy jest jakikolwiek sposób na odczytanie całego pliku na raz, zamiast czytać każdy wiersz lub każde słowo osobno?
Odpowiedzi:
Możesz użyć
std::getline
:#include <fstream> #include <string> int main() { std::ifstream file("Read.txt"); std::string str; while (std::getline(file, str)) { // Process str } }
Zauważ również, że lepiej jest po prostu skonstruować strumień plików z nazwami plików w jego konstruktorze, zamiast jawnie otwierać (to samo dotyczy zamykania, po prostu pozwól destruktorowi wykonać pracę).
Dalszą dokumentację na temat
std::string::getline()
można przeczytać w CPP Reference .Prawdopodobnie najłatwiejszym sposobem odczytania całego pliku tekstowego jest po prostu połączenie pobranych wierszy.
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'); }
źródło
while(getline(f, line)) { ...}
naprawdę jest to zalecany sposób. Wyjaśniono to tutaj: gehrcke.de/2011/06/ ... --- tam również znajdziesz przydatne sposoby na prawidłową obsługę błędów.#include <iostream>
#include <iostream>
być wymagane? Wydaje mi się, że<fstream>
i<string>
wystarczy. Jeśli masz na myślistd::getline
, to jest w<string>
środku, a nie w<iostream>
.Wiem, że to naprawdę bardzo stary wątek, ale chciałbym również wskazać inny sposób, który jest naprawdę bardzo prosty ... Oto przykładowy kod:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream file("filename.txt"); string content; while(file >> content) { cout << content << ' '; } return 0; }
źródło
Myślę, że możesz użyć funkcji istream .read (). Możesz po prostu zapętlić fragment z rozsądnym rozmiarem i odczytać bezpośrednio do bufora pamięci, a następnie dołączyć go do jakiegoś dowolnego kontenera pamięci (takiego jak std :: vector). Mógłbym napisać przykład, ale wątpię, czy chcesz kompletnego rozwiązania; daj mi znać, jeśli będziesz potrzebować dodatkowych informacji.
źródło
Cóż, aby to zrobić, można również użyć funkcji freopen dostarczonej w C ++ - http://www.cplusplus.com/reference/cstdio/freopen/ i czytać plik linia po linii w następujący sposób -:
#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; }
źródło
Inną metodą, o której jeszcze nie wspomniano, jest
std::vector
.std::vector<std::string> line; while(file >> mystr) { line.push_back(mystr); }
Następnie możesz po prostu powtórzyć wektor i zmodyfikować / wyodrębnić to, czego potrzebujesz /
źródło
vector
niepotrzebny krok. Możesz iterować nadifstream
usingstd::istream_iterator<std::string>(inFile)
.możesz również użyć tego do odczytania wszystkich wierszy w pliku jeden po drugim, a następnie wydrukowania 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; }
mam nadzieję, że to ci pomoże :)
źródło
cześć stary, to jest sposób na odczytanie ciągu w dokładnym wierszu przy użyciu tego kodu
mam nadzieję, że to może ci pomóc!
#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; }
Powodzenia !
źródło