在C++中,从只知道起始数字(但需要整行)的文本文件中检索某一行

Retrieving a certain line from a text file knowing only the starting numbers (but requiring the whole line) in C++

本文关键字:文本 文件 一行 检索 C++ 数字      更新时间:2023-10-16

我有一个文本文件,我需要通过它来获取特定的行,我知道该行包含的前6个字符,但当前代码不想停止将该行复制到另一个字符串,而是返回列表中的最后一个结果。

以下是当前的代码实现:

std::string Type(int num)
{
    ifstream reader("TypeID.txt", ios::in | ios::binary);     //declaring the file input
    string str, replace = "failed";
    int search;
    while (getline(reader, str));
    {
        search = str.find(num, 0);
        if (search <= 0) // once find has found the string run this
        {
            replace = str; //copy current line of str to replace
            reader.close();//after string is retrieved, close stream
        }
    }
    reader.close();//after string is not retrieved, close stream
    return replace;
}

顶部的"num"整数可以包含任何数字(实际上在0-336760之间),然后程序应该遍历文本文件,找到以该数字开头的行,将该行复制到替换字符串,关闭流并返回收集的字符串。但是,直到它到达文件的末尾,然后复制最后一行,这个实现才会停止。

我该怎么做才能抓住find()找到的行?

(我对find的理解是,它返回一个大于0的数字,以表明它已经找到了所需的字符串,因此触发了If语句)

文本文档示例:

0           #System
2           Corporation
3           Region
4           Constellation
28802       Mid-grade Harvest Alpha
28803       Mid-grade Harvest Beta
28804       Mid-grade Harvest Delta
28805       Mid-grade Harvest Epsilon

依此类推,总共21760行

问题就在这里:

search = str.find(num, 0);

search的类型是int,但find()的返回类型是std::size_t,因此类型不匹配。因此,您必须计算出当值超出范围时会发生什么(std::string::npos的值是多少?)。

其次,返回的值是第一个匹配项(或std::string::npos)的位置。所以,如果它被发现了,我预计结果不会小于零!

if (search <= 0) // So this is not going to work.