从 txt 文件中查找和打印数据
Find and Print data from txt file
我收到字符串 class 的错误消息。根据我在尝试解决此问题时发现的示例,我相信我正确使用了 class。
下面是代码:
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)
我正在尝试将文本文件读入字符串变量。我只想读取 "Grid receiver 34" 之后的 40 个字符,然后打印新字符串的内容。
while ( getline (gridData, allData) )
{
size_t gridNum = allData.find("Grid Receiver 34");
string receiverX = allData.substr (gridNum, 40);
cout << receiverX << endl;
}
此处您逐行读取文件,搜索 "Grid Receiver 34",但是,如果未找到该字符串,则 std::string::find
将 return 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;
}
我收到字符串 class 的错误消息。根据我在尝试解决此问题时发现的示例,我相信我正确使用了 class。
下面是代码:
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)
我正在尝试将文本文件读入字符串变量。我只想读取 "Grid receiver 34" 之后的 40 个字符,然后打印新字符串的内容。
while ( getline (gridData, allData) )
{
size_t gridNum = allData.find("Grid Receiver 34");
string receiverX = allData.substr (gridNum, 40);
cout << receiverX << endl;
}
此处您逐行读取文件,搜索 "Grid Receiver 34",但是,如果未找到该字符串,则 std::string::find
将 return 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;
}