即时通讯的问题是我能够创建一个文本文件,一次写入文本。我希望能够在必要时添加更多行,而无需创建新文件。我的下一个问题是,我似乎无法得到我正在寻找的输出。例如。文本文件包含
启动1
FNAME | L-NAME | SSN
END1
我的目标是只获取start1和end1中的数据,并在没有分隔符的情况下返回fname lname和ssn。这是我的代码
int main()
{
fstream filestr;
string line;
filestr.open ("file.txt", fstream::in | fstream::out | fstream::app);
if(!filestr.is_open())
{
cout << "Input file connection failed.\n";
exit(1);
}
else{
filestr<<"Start2\n";
filestr<< "middle|middle"<<endl;
filestr<<"end2"<<endl;
if(filestr.good()){
while(getline(filestr, line) && line !="end1"){
if(line !="Start1"){
//below this point the output goes screwy
while(getline(filestr, line,'|')){
cout<<"\n"<<line;
}
}
}
}
filestr.close();
}
答案 0 :(得分:2)
近:
当您打开文件以追加读取位置时。 所以在你开始阅读之前,你需要回到开头(或关闭并重新开放)。
filestr.seekg(0);
第二个探测器是你嵌套而while循环没有检查结束:
while(getline(filestr, line,'|')){
cout<<"\n"<<line;
这打破了界限。但它并没有停在最后。它一直持续到文件末尾。
您应该做的是获取当前行并将其视为自己的流:
if(line !="Start1")
{
std::stringstream linestream(line);
// ^^^^^^^^^^^^^^^^^^ Add this line
while(getline(linestream, line,'|'))
{ // ^^^^^^^^^^ use it as the stream
cout<<"\n"<<line;
}
}
PS:在file.txt
中start1
^^^^^ Note not Start1
答案 1 :(得分:1)
while(getline(filestr, line))
{
if(line !="Start1" && line != "end1")
{
// Get the tokens from the string.
}
}