Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c++

string

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???

like image 900
diehell Avatar asked Oct 15 '10 22:10

diehell


People also ask

Which is used to read lines from a file and split them into variables?

readlines() is used to read all the lines at a single go and then return them as each line a string element in a list. This function can be used for small files, as it reads the whole file content to the memory, then split it into separate lines.

How to read from a file and write to another file in C?

File Input and Output in C 1) Create a variable to represent the file. 2) Open the file and store this "file" with the file variable. 3) Use the fprintf or fscanf functions to write/read from the file.

How to get data from a file in C?

Steps To Read A File:Open a file using the function fopen() and store the reference of the file in a FILE pointer. Read contents of the file using any of these functions fgetc(), fgets(), fscanf(), or fread(). File close the file using the function fclose().

How do I read a CPP file?

File Handling in C++Create a stream object. Connect it to a file on disk. Read the file's contents into our stream object. Close the file.


2 Answers

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”;
    }
}
like image 71
Debajit Avatar answered Sep 20 '22 23:09

Debajit


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.

like image 24
JoshD Avatar answered Sep 18 '22 23:09

JoshD