Hoe lees je een bestand regel voor regel of een heel tekstbestand in één keer?

Ik zit in een tutorial die bestanden introduceert (hoe lees je van een bestand en schrijf je naar een bestand)

Allereerst is dit geen huiswerk, dit is gewoon algemene hulp die ik zoek.

Ik weet hoe ik één woord tegelijk moet lezen, maar ik weet niet hoe ik één regel tegelijk moet lezen, of hoe ik het hele tekstbestand moet lezen.

Wat als mijn bestand 1000 woorden bevat? Het is niet praktisch om het hele bestand woord voor woord te lezen.

Mijn tekstbestand met de naam “Lezen” bevat het volgende:

I love to play games
I love reading
I have 2 books

Dit is wat ik tot nu toe heb bereikt:

#include <iostream>
#include <fstream>
using namespace std;
int main (){
  ifstream inFile;
  inFile.open("Read.txt");
  inFile >>

Is er een manier om het hele bestand in één keer te lezen, in plaats van elke regel of elk woord afzonderlijk te lezen?


Antwoord 1, autoriteit 100%

U kunt std::getline:

. gebruiken

#include <fstream>
#include <string>
int main() 
{ 
    std::ifstream file("Read.txt");
    std::string str; 
    while (std::getline(file, str))
    {
        // Process str
    }
}

Houd er ook rekening mee dat het beter is om de bestandsstream gewoon te construeren met de bestandsnamen in de constructor in plaats van expliciet te openen (hetzelfde geldt voor sluiten, laat de destructor het werk doen).

Verdere documentatie over std::string::getline()kan worden gelezen op CPP-referentie.

Waarschijnlijk is de eenvoudigste manier om een heel tekstbestand te lezen, door die opgehaalde regels aan elkaar te koppelen.

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');
}  

Antwoord 2, autoriteit 12%

Ik weet dat dit een heel oud draadje is, maar ik wil ook wijzen op een andere manier die eigenlijk heel eenvoudig is… Dit is een voorbeeldcode:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
    ifstream file("filename.txt");
    string content;
    while(file >> content) {
        cout << content << ' ';
    }
    return 0;
}

Antwoord 3, autoriteit 3%

Ik denk dat je de istream .read() functie zou kunnen gebruiken. Je kunt gewoon een lus maken met een redelijke chunk-grootte en direct naar de geheugenbuffer lezen en het vervolgens toevoegen aan een soort willekeurige geheugencontainer (zoals std::vector). Ik zou een voorbeeld kunnen schrijven, maar ik betwijfel of je een complete oplossing wilt; laat het me weten als je aanvullende informatie nodig hebt.


Antwoord 4, autoriteit 3%

Nou, om dit te doen kan men ook de freopen-functie gebruiken die in C++ wordt geleverd – http: //www.cplusplus.com/reference/cstdio/freopen/en lees het bestand regel voor regel als volgt -:

#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;
}

Antwoord 5

Nog een methode die nog niet is genoemd, is std::vector.

std::vector<std::string> line;
while(file >> mystr)
{
   line.push_back(mystr);
}

Dan kunt u eenvoudig over de vector herhalen en wijzigen / extracten wat u nodig hebt /


Antwoord 6

U kunt dit ook gebruiken om alle regels in het bestand één voor één te lezen en vervolgens afdrukken 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;
}

Ik hoop dat dit u kan helpen:)


Antwoord 7

HELLO BRO Dit is een manier om de reeks in de exacte regel te lezen met behulp van deze code

Ik hoop dat dit je kan helpen!

#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;
}

Veel succes!


Antwoord 8

De bovenstaande oplossingen zijn geweldig, maar er is een betere oplossing om “een bestand in één keer te lezen”:

fstream f(filename);
stringstream iss;
iss << f.rdbuf();
string entireFile = iss.str();

Antwoord 9

Het onderstaande fragment helpt u bij het lezen van bestanden die uit Unicode-tekens bestaan

CString plainText="";
errno_t errCode = _tfopen_s(&fStream, FileLoc, _T("r, ccs=UNICODE"));
    if (0 == errCode)
    {
        CStdioFile File(fStream);
        CString Line;
        while (File.ReadString(Line))
        {
            plainText += Line;
        }
    }
    fflush(fStream);
    fclose(fStream);

je moet altijd de bestandsaanwijzer sluiten nadat je hebt gelezen, anders leidt dit tot fouten

Other episodes