从文本文件中将各种值读取到数组中

时间:2016-01-02 15:59:25

标签: c++ arrays variables ifstream file-read

我试图将.txt文件中的一些数据读入一些变量,然后将这些变量传递给一个类对象。文本文件中的前几个值正常工作(firstNames,surname,dob,accountNo),但bankNumbers正在造成麻烦。帐户持有人可以拥有0到5个帐户,因此有些帐户可能有3个,0个或5个。此时,它会读入接下来的5个值,因此如果我的第一个用户只有3个帐户,我的程序将会读取accountNo和surname作为数组的第4和第5个值。如何使程序只读取那里的数字?这是一个示例文本文件:

548161 Bloggs Joe 01-01-1970 1567 1824 2041
378941 Smith John 25-12-1985 
123085 Claus Santa 30-05-1910 7829 2398 4890 1473 4392
318945 Obama Barack 14-02-1965 4382 3944

这是我的代码:

int main()
{
    ifstream accountsFile;
    string surname, firstNames, dob;
    int accountNo, bankNumbers[5];

    accountsFile.open("Accounts.txt", ifstream::in);

    int i = 0;
    while (!accountsFile.eof())
    {

        accountsFile >> accountNo >> surname >> firstNames >> dob;

        for (int i = 0; i < 5; i++)
        {
            accountsFile >> bankNumbers[i];
        }

        accounts[i] = Account(accountNo, surname, firstNames,  dob, bankNumbers);
        i++;
    }

    accountsFile.close();

    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

将所有变量更改为字符串。这样你就可以使用getline()方法来获取每一行(这将是一个完整的帐户)

然后将输入行拆分为字符串数组,并根据帐号,姓氏,名字和出生日期相应填写变量。

然后对于银行编号,使用从索引4开始的数组(这将是第一个银行编号)单独填写它们,直到到达行字符串数组的末尾。

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

using namespace std;

int main()
{
    ifstream accountsFile;
    string surname, firstName, dob;
    string accountNo, bankNumbers[5];

    accountsFile.open("Accounts.txt", ios::in);

    string input;
    int accountsIndex = 0;

    if (accountsFile)
    {
        getline(accountsFile, input);

        while (accountsFile)
        {
            string line[9];
            int lineIndex = 0;

            for (int x = 0; x < input.length(); x++) {
                line[lineIndex] += input[x];
                if (input[x] == ' ') {
                    lineIndex++;
                }
            }

            accountNo = line[0];
            surname = line[1];
            firstName = line[2];
            dob = line[3];

            for (int x = 4; x < (sizeof(line) / sizeof(*line)); x++)
            {
                bankNumbers[x - 4] = line[x];
            }

            accounts[accountsIndex] = Account(accountNo, surname, firstName, dob, bankNumbers);
            accountsIndex++;

            getline(accountsFile, input);
        }

        accountsFile.close();
    }

    system("pause");
    return 0;

}