c++string

C++: Read from text file and separate into variable


I have this in a text file:

John 20 30 40
mike 30 20 10

How do i read from the text file and separate them into variable name, var1, var2, var3. This is my attempt, seems it doesnt work. Help please.

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

int main () {
  string name,result;
  int number1;
  ifstream myfile ("marks.txt");
  if (myfile.is_open())
  {
    while ( !myfile.eof() )
    {
      getline (myfile,name,'\t');
      getline (myfile,var1,'\t');
      getline (myfile,var2,'\t');
      getline (myfile,var3,'\t');
      cout << name << var1 << var2 << var3;


    }

    myfile.close();

  }

  else cout << "Unable to open file";

  return 0;
}

EDIT 1:

Nocturne Suggestion:

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;


int main()
{
    ifstream inputFile("marks.txt");
    string line;

    while (getline(inputFile, line))
    {
        istringstream ss(line);

        string name;
        int var1, var2, var3;

        ss >> name >> var1 >> var2 >> var3;
        cout << name << var1 << var2 << var3 << endl << endl;
    }
}

output:

John203040

mike302010

302010

Why another 302010???


Solution

  • Something like this should work (I don't have a compiler handy, so you may need to tweak this a little):

    #include <iostream>
    #include <sstream>
    using namespace std;
    
    
    int main()
    {
        ifstream inputFile("marks.txt");
        string line;
    
        while (getline(inputFile, line))
        {
            istringstream ss(line);
            
            string name;
            int var1, var2, var3;
    
            ss >> name >> var1 >> var2 >> var3;
        }
    }
    

    Edit: Just saw this again, I don’t know why I chose the get line approach earlier. Doesn’t the following (simpler solution) work?

    #include <fstream>
    using namespace std;
    
    int main()
    { 
        ifstream fin("marks.txt");
    
        string name;
        int var1;
        int var2;
        int var3;
        
        while (fin >> name >> var1 >> var2 >> var3)
        {
            /* do something with name, var1 etc. */
            cout << name << var1 << var2 << var3 << "\n";
        }
    }