从文本文件中读取不同数量的值到数组中
Reading various amount of values into array from text file
我试图从 .txt 文件中读取一些数据到一些变量中,然后这些变量将被传递到一个 class 对象中。文本文件中的前几个值工作正常(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;
}
改为将所有变量更改为字符串。这样你就可以使用 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;
}
我试图从 .txt 文件中读取一些数据到一些变量中,然后这些变量将被传递到一个 class 对象中。文本文件中的前几个值工作正常(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;
}
改为将所有变量更改为字符串。这样你就可以使用 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;
}