简体   繁体   中英

How to parse through a text file c++?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM