如何将文件中的行存储为变量

时间:2017-12-05 23:35:13

标签: c++ variables

我想从名为organisation.txt的文本文件中显示员工姓名,职业和员工部门,并将其保存在班级OrganisationRecord中声明的变量中。< / p>

我该怎么做?

#include <iostream>
#include <string>
#include <vector>
#include <fstream>

#define ORGANISATIONALRECORDSFILE "organisation.txt"
#define HRRECORDSFILE "HR_records.txt"
#define PAYROLLRECORDSFILE "payroll_records.txt"

using namespace std;


class OrganisationRecord
{
private:
public:
    string name;
    string occupation;
    string department;
};

class HRRecord
{
private:
public:
    string address;
    string phonenumber;
    string ninumber;
};

class PayrollRecord
{
private:
public:
    string ninumber;
    double salary;
};

class PayrollProcessing
{
private:
    ifstream inputfile;
    ofstream outputfile;
    vector<OrganisationRecord> OrganisationRecords;
    vector<HRRecord> HRRecords;
    vector<PayrollRecord> PayrollRecords;
public:
    void loadOrganisationRecords(string filename);
    void loadHRRecords(string filename);
    void loadPayrollRecords(string filename);
    void displayEmployeeOfSalaryGTE(double salary);
    //GTE = greater than or equal to
};

void PayrollProcessing::loadOrganisationRecords(string filename)
{
    inputfile.open(ORGANISATIONALRECORDSFILE);

    if (!inputfile)
    {
        cout << "the organisation records file does not exist" << endl;
        return;
    }

        OrganisationRecord _organisationrecord;
        int employeenumber;


        while (inputfile >> employeenumber)
        {   
            while (inputfile >> _organisationrecord.name)
            {
                cout << _organisationrecord.name;
                cout << _organisationrecord.occupation;
                cout << _organisationrecord.department <<endl;
            }

            OrganisationRecords.push_back(_organisationrecord);
        }

}



int main(void)
{
    PayrollProcessing database1;
    database1.loadOrganisationRecords(ORGANISATIONALRECORDSFILE);

    return 0;
}

organisation.txt

0001 
Stephen Jones 
Sales Clerk 
Sales
0002 
John Smith 
Programmer 
OS Development
0003 
Fred Blogs 
Project Manager 
Outsourcing

1 个答案:

答案 0 :(得分:0)

使用inputfile >> _organisationrecord.name时,它会停在第一个空格字符处。因此,只有Stephen将被读取并存储在organisationrecord.name

您需要稍微改变一下策略。

  1. 逐行读取文件的内容。当没有剩余的行时停止。
  2. 按照您认为合适的方式处理每一行。
  3. 这是处理输入的一种方法。

    std::string line;
    while ( std::getline(inputfile, line) )
    {   
       // Extract the employeenumber from the line
       std::istringstream str(line);
       if ( !(str >> employeenumber) )
       {
          // Problem reading the employeenumber.
          // Stop reading.
          break;
       }
    
       if (!std::getline(inputfile, line) )
       {
          // Problem reading the next line.
          // Stop reading.
          break;
       }
    
       _organisationrecord.name = line;
    
       if (!std::getline(inputfile, line) )
       {
          // Problem reading the next line.
          // Stop reading.
          break;
       }
       _organisationrecord.occupation = line;
    
       if (!std::getline(inputfile, line) )
       {
          // Problem reading the next line.
          // Stop reading.
          break;
       }
       _organisationrecord.department = line;
    
       std::cout << _organisationrecord.employeenumber << std::endl;
       std::cout << _organisationrecord.name << std::endl;
       std::cout << _organisationrecord.occupation << std::endl;
       std::cout << _organisationrecord.department << endl;
    
       OrganisationRecords.push_back(_organisationrecord);
    }