需要程序来搜索整个文本文件
Need program to search through an entire text file
很长的帖子,但是我很难让这个程序读取整个文本文件,而不是看起来像第一行。
// return true only if the code is valid
bool PriceList::isValid(string code) const {
ifstream myfile;
string line;
myfile.open("pricelist.txt");
if (myfile.is_open()) {
while (getline(myfile,line))
{
if (line.find(code) != string::npos)
{
cout << line <<endl;
return true;
}
else
{
cout << line <<endl;
return false;
}
}
}
else
throw invalid_argument("Could not open file");
}
该程序的这一部分的目的是确定是否存在文本文件中的产品条代码。这是给我们的文本文件(Pricelist.txt)的一部分(从左到右的类别是名称,条形码,价格和应税):
Soda_can 1035851680 2.29 1
Red_Cabbage 1163115674 1.99 0
Tomato_Sauce 1195034963 0.29 0
Tuna_chunky_in_water 1304271912 0.59 0
Salad_Dressing 1352230364 1.39 0
这是测试此功能的主类的代码段。Addentry行调用了我已经编码的Addentry函数,将每个项目添加到文本文件末尾(我们主要关注条形码数据值,即1000,2000)。testanswer行调用函数以说明该函数是否正确运行。第一个数据值是测试的标题,第二个数据值是要测试的变量,第三个是函数应产生的值。因此,例如,第一个Testanswer行是在测试条形码1000是否在文本中。文件,结果应该是正确的:
{ PriceList priceList;
priceList.addEntry("Apples", "1000", 1.99, false);
priceList.addEntry("Bananas", "2000", 0.99, false);
testAnswer("PriceList isValid1", priceList.isValid("1000"), true);
testAnswer("PriceList isValid2", priceList.isValid("19"), false); }
,正如我所说的那样,我很难使程序读取所有文本文件。它似乎只是读取第一行,苏打水can,并且会导致两个testanswer函数导致错误。这是当前的输出:
Soda_can 1035851680 2.29 1
FAILED PriceList isValid1: expected 1 but received 0
Soda_can 1035851680 2.29 1
PASSED PriceList isValid2: expected and received 0
如果我手动将苹果和香蕉数据值放在最顶部会产生正确的值,但显然我想使其适用于文本文件上任何地方的任何项目。我花了几个小时来解决这个问题,这是我现在得到的最好的。我非常感谢您的任何帮助,我感谢您阅读所有这些帮助。让我知道我的任何解释尚不清楚。
在您的while
子句中您在if
和else
部分中都调用返回。这将完全结束用于该功能的处理。WARE子句无法达到第二个迭代。
实际问题是您的程序返回,无论代码检查if (line.find(code) != string::npos)
。
可能,如果找不到代码,您希望继续搜索/阅读文件,并在找到代码后停止读取文件。这应该一直持续到达到EOF
。
您可以使用其他变量(例如bFound
)存储结果并将其返回。如下所示:
bool bFound = false;
while (getline(myfile,line))
{
if (line.find(code) != string::npos)
{
cout << line <<endl;
bFound = true;
break; //Record found break from loop
}
else
{
cout << line <<endl;
continue; //Record not found. Continue loop.
}
}
return bFound;
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入