簡體   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