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 1:
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”;
}
}
Solution 2:
It looks like you need to declare var1, var2, and var3.
Also instead of this:
getline (myfile,name,'\t');
getline (myfile,var1,'\t');
getline (myfile,var2,'\t');
getline (myfile,var3,'\t');
Try this:
myfile >> name;
myfile >> var1;
myfile >> var2;
myfile >> var3;
Not because what you had is wrong, but the second is cleaner and will handle all white space.