如何在文本文件中逐行读取并填充指向对象数组的指针

时间:2019-03-26 04:07:57

标签: c++

使用this线程的解决方案,我对如何在文本文件中逐行读取有一个大致的了解。我的问题出现在如何将数据填充到我的电话簿中,这是指向对象数组的指针。

这是我的文本文件输出。

Albert, Fred
4541231234
8888 Avenue Drive

Doe, John
6191231234
1234 State Street

Smith, Mike
8791231234
0987 Drive Avenue

我想做的是解析每一行,并使用其所需要的任何信息来填充“电话簿”(定义为)。

class AddressBook
{
private:
    Contact* phoneBook[maxSize]; //array of contact pointers
    ...etc
}

class Contact
{
public:
    Contact();

    std::string firstName;
    std::string lastName;
    std::string name; //lName + fName
    std::string phoneNumber;
    std::string address;
};

至少我认为我可以逐行读取它,但是我不知道从哪里开始如何识别它是名字,姓氏,电话号码还是地址,因为它们都是字符串。

void AddressBook::writeToFile(Contact * phoneBook[])
{
    std::string line;
    std::ifstream myFile("fileName.txt");
    if (myFile.is_open())
    {
        while (getline(myFile, line))
        {
            //do something
        }
        myFile.close();
    }
}

1 个答案:

答案 0 :(得分:0)

您必须以四行为一组读取文件内容。

std::string line1; // Expected to be empty
std::string line2; // Expected to contain the name
std::string line3; // Expected to contain the phone number
std::string line4; // Expected to contain the address.

并且,使用{p>代替while(getline(...))语句:

while (true)
{
   if ( !getline(myFile, line1) )
   {
      break;
   }

   if ( !getline(myFile, line2) )
   {
      break;
   }

   if ( !getline(myFile, line3) )
   {
      break;
   }

   if ( !getline(myFile, line4) )
   {
      break;
   }

   // Now process the contents of lines
}

您可以通过在行组中使用数组来简化这一点

std::string lines[4];
while ( true )
{
   // Read the group of lines
   for (int i = 0; i < 4; ++i )
   {
      if ( !getline(myFile, lines[i]) )
      {
         break;
      }
   }

   // Process the lines
}