如何在文档中查找某些关键字并将它们读入程序(C++)
How to look for certain keywords in a document and read them into the program (C++)
我得到了一份文档,我必须从中读取某些信息到我的 C++ 程序中,这些信息前面有适当的关键字,如下所示:
...
*useless information*
...
KEYWORD_A : VALUE_A
...
*useless information*
...
KEYWORD_B : VALUE_B
...
最efficient/correct过滤这些不必按特定顺序出现的关键字的方法是什么?我目前使用以下方案来做到这一点
std::string content_of_line = "";
while(content_of_line.find("KEYWORD_A") == std::string::npos){
std::getline(file,content_of_line);
}
std::stringstream stream(content_of_line);
stream >> variable_a;
std::getline(file,content_of_line);
while(content_of_line.find("KEYWORD_B") == std::string::npos){
std::getline(file,content_of_line);
}
stream.clear();
stream << content_of_line;
stream >> variable_b;
// and so on....
然而,这会产生很多冗余代码,并且还依赖于关键字的特定顺序(不一定必须存在)...我希望你能告诉我一个更好的方法来解决我的问题。
非常感谢您尝试帮助我解决我的问题!
好的,我试试
#include <fstream>
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
std::ifstream inp("inp.txt");
std::string word;
using valueType = std::string;
//Assuming keywords only appear once in the file
std::unordered_map<std::string, valueType> keywords {{"KEYWORD_A", ""},{"KEYWORD_B", ""},};
while(inp>>std::ws>>word) {
if(keywords.find(word) != keywords.cend()) {
//Assuming schema of lines with keywords is KEY : VALUE
inp.ignore(std::numeric_limits<std::streamsize>::max(), ':');
inp>>std::ws>>keywords[word];
}
}
for(const auto& pair: keywords) {
std::cout<<pair.first<<' '<<pair.second<<'\n';
}
return 0;
}
我得到了一份文档,我必须从中读取某些信息到我的 C++ 程序中,这些信息前面有适当的关键字,如下所示:
...
*useless information*
...
KEYWORD_A : VALUE_A
...
*useless information*
...
KEYWORD_B : VALUE_B
...
最efficient/correct过滤这些不必按特定顺序出现的关键字的方法是什么?我目前使用以下方案来做到这一点
std::string content_of_line = "";
while(content_of_line.find("KEYWORD_A") == std::string::npos){
std::getline(file,content_of_line);
}
std::stringstream stream(content_of_line);
stream >> variable_a;
std::getline(file,content_of_line);
while(content_of_line.find("KEYWORD_B") == std::string::npos){
std::getline(file,content_of_line);
}
stream.clear();
stream << content_of_line;
stream >> variable_b;
// and so on....
然而,这会产生很多冗余代码,并且还依赖于关键字的特定顺序(不一定必须存在)...我希望你能告诉我一个更好的方法来解决我的问题。 非常感谢您尝试帮助我解决我的问题!
好的,我试试
#include <fstream>
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
std::ifstream inp("inp.txt");
std::string word;
using valueType = std::string;
//Assuming keywords only appear once in the file
std::unordered_map<std::string, valueType> keywords {{"KEYWORD_A", ""},{"KEYWORD_B", ""},};
while(inp>>std::ws>>word) {
if(keywords.find(word) != keywords.cend()) {
//Assuming schema of lines with keywords is KEY : VALUE
inp.ignore(std::numeric_limits<std::streamsize>::max(), ':');
inp>>std::ws>>keywords[word];
}
}
for(const auto& pair: keywords) {
std::cout<<pair.first<<' '<<pair.second<<'\n';
}
return 0;
}