我希望能够逐行浏览此文本文件并抓取其中的一部分。例如,
Albert, Fred
4541231234
8888 Avenue Drive
Doe, John
6191231234
1234 State Street
Smith, Mike
8791231234
0987 Drive Avenue
我需要抓住阿尔伯特并将其存储为姓氏。 Fred为名字(不包括“,”以及电话号码和地址。
搜索线程后,我发现了一些帮助,这就是我所拥有的。
void AddressBook::readFile(Contact * phoneBook[])
{
std::string line, line1, line2, line3, line4;
std::ifstream myFile("fileName.txt");
std::string name, fName, lName, phoneNumber, address;
if (!myFile.is_open())
{
std::cout << "File failed to open." << std::endl;
return;
}
while (true)
{
if (!getline(myFile, line1))
{
break;
}
if (!getline(myFile, line2)) //need to parse into lName and fName
{
break;
}
if (!getline(myFile, line3))
{
break;
}
if (!getline(myFile, line4))
{
break;
}
addContact(line1, line2, line3, line4);
}
}
如您所见,此代码仅捕获整行。如何在逗号处停下来,将其存储到姓氏变量中,然后继续使用名字?
答案 0 :(得分:1)
我认为您可以使用substr
函数,
line2_1 = line2.substr(0, line2.find(','))
line2_2 = line2.substr(line2.find(',')+2, line2.length())
+2
是因为您有一个逗号(+1)和一个在逗号后的空格(+1)。
答案 1 :(得分:1)
std::getline
has an overload with a third parameter,可让您将流分割为希望使用的任何字符,而不是行尾。因此,您将line1
用作std::istringstream
的基础
std::istringstream strm(line1);
然后您就可以
std::getline(strm, lastname, ',');
在流中留下一个空格,然后是名字,忽略空格,并在流末尾获取行以获取名字。
总的来说,应该看起来像
std::istringstream strm(line1);
std::getline(strm, lastname, ',');
strm.ignore();
std::getline(strm, firstname);
答案 2 :(得分:1)