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

时间:2014-09-30 20:37:42

标签: c++ text getline

我有一个文本文件,我需要通过它来获取一个特定的行,我知道该行包含的前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;
}

&#34; num&#34;在他顶部的整数可以包含任何数字(实际上在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行

1 个答案:

答案 0 :(得分:1)

问题在于:

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.