I am trying to parse through a text file. I am using space to separate between words. here is what the text file looks like.
123456789 15.5 3 40.0
there is about 15 lines in this format. Right now using
int sin = stoi(line.substr(0, line.find(' ')));
I can separate the first two words but not the rest?!!
const char * IN_FILE = "EmployeePayInput.txt";
// A second way to specify a file name:
#define OUT_FILE "EmployeePayOutput.txt"
int main()
{
ifstream ins;
ins.open(IN_FILE);
//Check that file opened without any issues
if (ins.fail())
{
cerr << "ERROR--> Unable to open input file : " << IN_FILE << endl;
cerr << '\n' << endl;
_getch(); // causes execution to pause until a char is entered
return -1; //error return code
}
//Define ofstream object and open file
ofstream outs;
outs.open(OUT_FILE);
//Check that file opened without any issues
if (outs.fail())
{
cerr << "ERROR--> Unable to open output file : " << OUT_FILE << endl;
cerr << '\n' << endl;
_getch(); // causes execution to pause until a char is entered
return -2; //error return code
}
// Process data until end of file is reached
while (!ins.eof()) {
string line;
while (getline(ins, line)) {
Employee e;
int sin = stoi(line.substr(0, line.find(' ')));//prints and stores the first item in sin
e.setSin(sin);
cout << sin << endl;
float hourly = stof(line.substr(line.find(' ')));
cout << hourly << endl;//prints and stores the second item in hourly
e.setPayRate(hourly);
int exemption = stof(line.substr( line.find(' '))); //doesn't do anything, I need to read the next item in the same line
cout << exemption << endl;
}
}
// Close files
ins.close();
outs.close();
cout << '\n' << endl;
// Remove following line of code (and this comment) from your solution
cout << "Type any key to continue ... \n\n";
_getch(); // causes execution to pause until char is entered
return 0;
}
I would rewrite your input logic like this:
// Process data until end of file is reached
string line;
while (getline(ins, line)) {
std::istringstream iss(line);
if (iss >> sin >> hourly >> exemption) {
Employee e;
e.setSin(sin);
e.setPayRate(hourly);
cout << exemption << endl;
}
}
As for your particular problem, line.substr(line.find(' ')
takes the rest of the line from the position of the first ' '
. line
isn't changed by this operation, so you get the same if you call it a second time.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.