Jak odczytać wiersz po wierszu lub cały plik tekstowy na raz?

Jestem w tutorialu, który wprowadza pliki (jak odczytywać i zapisywać Z\do pliku)

Po pierwsze, to nie jest praca domowa, to jest tylko ogólna pomoc, której szukam.

Wiem, jak czytać jedno słowo na raz, ale nie wiem, jak czytać jedną linijkę na raz, ani jak czytać cały plik tekstowy.

Co jeśli mój plik zawiera 1000 słów? Czytanie każdego słowa nie jest praktyczne.

Mój plik tekstowy o nazwie (Read) zawiera:

Kocham grać w gry Kocham czytanie Mam 2 Książki

To jest to, 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 jakiś możliwy sposób, aby odczytać cały plik naraz, zamiast czytać każdą linijkę lub każde słowo osobno?

Author: simonmorley, 2012-10-23

5 answers

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 konstruować strumień plików z nazwami plików w konstruktorze, a nie jawnie otwierać (to samo dotyczy zamykania, po prostu pozwól destruktorowi wykonać pracę).

Dalszą dokumentację o std::string::getline() można znaleźć pod adresem CPP Reference .

Prawdopodobnie najprostszym sposobem na odczytanie całego pliku tekstowego jest połączenie tych 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');
}  
 124
Author: 111111,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-01 13:22:35

Wiem, że to naprawdę stary wątek, ale chciałbym również wskazać inny sposób, który jest naprawdę 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;
}
 18
Author: user2673553,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-29 01:04:06

Myślę, że przydałby się istream .funkcja read (). Możesz po prostu zapętlić z rozsądnym rozmiarem kawałka i odczytać bezpośrednio do bufora pamięci, a następnie dołączyć go do pewnego rodzaju arbitralnego kontenera pamięci (takiego jak std::vector). Mógłbym napisać przykład, ale wątpię, czy chcesz kompletnego rozwiązania; proszę dać mi znać, jeśli będziesz potrzebować dodatkowych informacji.

 4
Author: Bartek Banachewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-23 17:37:54

Cóż, do tego można również użyć funkcji freopen dostarczonej w C++- http://www.cplusplus.com/reference/cstdio/freopen/ i odczytaj 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;
}
 4
Author: AnkitSablok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-07 22:23:48

Inną metodą, która nie została jeszcze wymieniona, jest std::vector.

std::vector<std::string> line;

while(file >> mystr)
{
   line.push_back(mystr);
}

Następnie możesz po prostu iterować nad wektorem i zmodyfikować / wyodrębnić to, czego potrzebujesz /

 1
Author: Bugster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-23 17:40:37