我目前正在尝试构建一个函数,它接受用户的输入,在一个字符串(从一个文本文件)中搜索该输入,然后从该行读取该字符串到预期的“结束”行。
#include <iostream>
#include <fstream>
using namespace std;
int main() {
string dataFile, dataSFile, accNum, Name, Number, SS, Address, Bal, endV;
dataFile = "accounts.txt";
ifstream fin1(dataFile);
if(!fin1.is_open()){
cout << "\033[91mError Gathering Account Information.\nPlease contact your IT Administrator.\n \n";
return 0;
}
getline(fin1, dataSFile, '\0');
ofstream fout1(dataFile, std::ios_base::app);
cout << "Please enter the acc #" << endl;
getline(cin, accNum);
if(dataSFile.find(accNum) != std::string::npos){
fin1 >> Name >> "\0" >> Number >> "\0" >> SS >> "\0" >> Address >> "\0" >> Bal >> "\0" >> endV;
cout << "[" << accNum << "]" << endl;
cout << Name << endl;
cout << Number << endl;
cout << SS << endl;
cout << Address << endl;
cout << Bal << end;
}
return 0;
}
在“accounts. TXT”中,存在以下项目。
[10111]
Gerald Gray
800-111-1111
222-22-2222
19 Driveway Dr, Grayville, CT 00000
$0
[end]
[10222]
James Murray
800-222-2222
333-33-3333
20 Driveway Dr, Grayville, CT 00001
$500
[end]
我想使用file.find() != std::string:npos
在文本中查找字符串,确定位置,然后选择下面的行,直到它到达[end]
。
示例:
请输入帐号10111
[10111]杰拉尔德·格雷800-111-1111 222-22-2222康涅狄格州格雷维尔19车道博士00000 0end of output
任何和所有的帮助都是感激不尽的!谢谢!
我只尝试过使用getline和fin,因为我没有其他方法来这样做。
1条答案
按热度按时间t5fffqht1#
使用输入字符串流而不是文件流的可能解决方案:
account
结构体和一个accounts
无序Map。可以打印帐户对象(例如,使用
std::cout << account
)。parse
,传递一个输入流,并接收一个accounts
Map。parse
函数不断从输入流中阅读行。只要找到与帐号匹配的行,它就会尝试从下一行读取帐户字段的其余部分。
如果它无法执行此操作(因为没有要读取的行,或者因为读取的某些行与预期模式不匹配),它将继续循环或退出循环。
否则,它会将新帐户添加到Map中。
Demo(https://godbolt.org/z/x6GrfocWc)