如何从随机访问文件中搜索和显示内容?
Posted
技术标签:
【中文标题】如何从随机访问文件中搜索和显示内容?【英文标题】:How to search and display content from a random access file? 【发布时间】:2013-11-11 03:43:20 【问题描述】:此代码应该在文件中搜索每个客户端的 iterNo,然后显示该信息。我的问题是,无论我搜索什么数字,它总是显示文件中的第一项。任何帮助将不胜感激。现在真的很绝望......提前感谢您的回复。
void View()
char ans; //answer to store 'y' or 'n'
Intervention inte;
int interNo;
ifstream InfoFile("info.dat", ios::in |ios::binary|ios::app);
if (!InfoFile)
cout <<"Error - random files could not be opened.";
else
while (true)
cout << "\nEnter client's interNo number to display ";
cin >> interNo;
inte.getClient();
inte.getAddress();
inte.getTelNo();
inte.getTime();
inte.getDate();
inte.getAnimal();
//InfoFile.seekg(sizeof(Intervention)*(interNo - 1));
InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));
//if not eof show data
if (!InfoFile.eof())
//Display the processed
// info for the employee
inte.display();
cout << "Enter another employee's information to display ? [y / n] ";
fflush(stdin);
ans = ' ';
while (ans != 'y' && ans != 'Y' &&
ans != 'n' && ans != 'N')
ans = _getch();
cout << endl;
if (ans == 'n' || ans == 'N')
exit(1);
//end while
//end else
//end function view
//**********************************************
【问题讨论】:
你没有做任何搜索;您只是使用read
从文件中读取第一个值。 (你注释掉了上面的行,它确实移动了文件指针。)如果你想定位一个特定的客户端,你必须从文件的开头实际移动文件指针。
真相是我不知道把那条线放在哪里......如果我把它放在 (if (!InfoFile.eof())) 之外的任何地方......那么它就直接到问我是否要显示另一个而不显示任何内容
【参考方案1】:
代码做了它应该做的事情。如果找到的干预是您要查找的干预,您不会检查任何地方,也不会移动文件读取指针。
如果您将 ID 存储在文件中
你也只读过一次干预:
InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));
也许你的意思是检查干预是否有你输入的 ID?
while(inte.getID()!=interNo && InfoFile)
InfoFile.read(reinterpret_cast<char *> (&inte), sizeof(Intervention));
如果你不这样做
您需要取消对之前必须注释掉的代码行的注释:
InfoFile.seekg(sizeof(Intervention)*(interNo - 1));
这一行实际上应该将read pointer
定位到文件中写入给定Intervention
的位置。查看C++ reference 页面了解有关读取指针的更多详细信息。
【讨论】:
我引用了您应该替换的行。将第一个 sn-p 中的代码替换为第二个 sn-p 中的代码。 我遇到了另一个问题..当我输入我正在搜索的数字时,它仍然显示第一个项目,但如果我选择是并尝试显示另一个项目,文件中的第二个项目显示..如果我再次选择是来显示另一个,它会显示我输入的号码的信息 我想我误解了文件本身背后的概念。如果您将 ID 存储在文件中,我的解决方案将有效,但您可能不。我并没有真正看你评论的行。请稍后再检查我的主要答案。 我没有使用你的 getID,而是使用了 getInterventionNo,因为我的程序中没有 getID 感谢您的帮助,但即使取消注释该行,它仍然没有显示正确的信息以上是关于如何从随机访问文件中搜索和显示内容?的主要内容,如果未能解决你的问题,请参考以下文章