繁体   English   中英

使用一些 Pyhton 或任何脚本读取文件并将数据转换为 C++ 键=>值对(STL 映射)

[英]Reading files using some Pyhton or any script and converting data into C++ key=>value pair (STL maps)

我正在尝试逐行读取文件中的数据并从中读取一些特定数据,然后将该数据作为键值对存储到 c++ stl 映射中。

例如:-假设我们有一个文件 raw_data.inc,其中包含以下数据:-

//
This file consists data of players
Players data
#define David     data(12345) //David's data
#define Mark      data(13441) //Mark's data
Owners data
#define Sarah     data(98383) //Sarah's data
#define Coner     data(73834) //Coner's data
This is the end of the file
//

假设上述所有数据都存储在我们要读取的文件中(假设正斜杠也是数据的一部分)。 所以我想要的是读取它的某些部分(具体是David12345 )并将其存储到 c++ stl map 作为键值对

map <string,string> mp

和数据将被存储为

mp[12345=>"David",13441=>"Mark",98383=>"Sarah",73834=>"Coner"];

所以我的问题是,有可能这样做吗? 如果是,那么如何? C++ 的正常文件流会起作用吗?

假设我们不知道存储在该文件中的数据的数据类型是什么。 文件可以是.h文件或.cpp文件或.inc文件

目前尚不清楚您实际上要做什么。 但是,如果您只想在运行时将文件的内容读入std::map ,那么您只需解析文件的行:

#include <iostream>
#include <string>
#include <sstream>
#include <map>

int main() {
    //
    std::stringstream ss{R"(#define David     data(12345)
#define Mark      data(13441)
#define Sarah     data(98383)
#define Coner     data(73834))"};

    std::map<std::string, std::string> m;
    std::string line;
    while (std::getline(ss,line)){
        std::string dummy;
        std::string name;
        std::string data;
        std::stringstream linestream{line};
        linestream >> dummy >> name >> data;
        auto start = data.find('(');
        auto stop = data.find(')');
        m[data.substr(start+1,stop-start-1)] = name;
    }
    for (const auto& e : m) {
        std::cout << e.first << " " << e.second << "\n";
    }
    return 0;
}

您只需将 stringstream 替换为ifstream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM