从 txt 文件中查找和打印数据

Find and Print data from txt file

本文关键字:打印 数据 查找 txt 文件      更新时间:2023-10-16

我有一个关于字符串类的错误消息。 根据我通过尝试解决此问题发现的示例,我相信我正确地使用了该类。

下面是代码:

int main()
{
    string allData, gridNum;
    ifstream gridData;
    gridData.open ("/Users/Neo/Documents/UNi/Year_3/Grid Data Analysis Program/gridData.txt");
    if (gridData.is_open())
    {
        while ( getline (gridData, allData) )
        {

            size_t gridNum = allData.find("Grid Receiver 34");
            string receiverX = allData.substr (gridNum, 40);
            cout << receiverX << endl;

        }
        gridData.close();
    }
    else cout << "Unable to open file..." << endl;

return 0;
}

控制台中的错误...

libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string
(lldb) 

我正在尝试从文本文件读取字符串变量。我只想在"网格接收器 34"字之后阅读 40 个字符,然后打印新字符串的内容。

    while ( getline (gridData, allData) )
    {

        size_t gridNum = allData.find("Grid Receiver 34");
        string receiverX = allData.substr (gridNum, 40);
        cout << receiverX << endl;

    }

在这里,您逐行读取文件,搜索"网格接收器 34",但是,如果未找到该字符串,则std::string::find将返回std::string::npos 。以此作为substr的论据会给你带来麻烦。您应该在使用前检查它是否找到它:

    while ( getline (gridData, allData) )
    {
        size_t gridNum = allData.find("Grid Receiver 34");
        if(gridNum != std::string::npos)
        {
          string receiverX = allData.substr (gridNum, 40);
          cout << receiverX << endl;
        }
    }

另外,停止使用 using namespace std; .

您可能会在

找不到搜索字符串的行上收到异常。

您只想尝试在找到字符串的行上提取子字符串。

按如下方式修改代码:

int main()
{
    string allData, gridNum;
    ifstream gridData;
    gridData.open ("/Users/Neo/Documents/UNi/Year_3/Grid Data Analysis Program/gridData.txt");
    if (gridData.is_open())
    {
        while ( getline (gridData, allData) )
        {
            size_t gridNum = allData.find("Grid Receiver 34");
            if (gridNum != std::string::npos)  // add this condition :-)
            {
                string receiverX = allData.substr (gridNum, 40);
                cout << receiverX << endl;
            }
        }
        gridData.close();
    }
    else cout << "Unable to open file..." << endl;
return 0;
}