拆分读取文件 C++

Splitting read file C++

让我们先说我完全没有使用 C++ 的经验,但是我得到了这个项目来连接 POS 和 verifone。我们没有标准的 verifone SDK,而是一些定制的。

起初我需要准备数据发送到 C++,C++ 将把它发送到 Verifone。这就是我卡住的地方,我有一个 .txt 文件,我可以用 C++ 读取它,但现在我需要拆分数据。

这是我当前的代码:

#include "stdafx.h"
#include <sstream>
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

string file_get_contents(const char *filename)
{
    ifstream in(filename);
    if (in.fail())
    {
        cerr << "File not found: " << filename << endl;
        return "";
    }

    std::stringstream buffer;
    buffer << in.rdbuf();
    in.close();
    return buffer.str();
}

int main(int argc, char **argv)
{

    vector<string> strings;

    string contents = file_get_contents("C:/wamp/www/cmd/config.txt");

    string s;
    while (contents, s, '||') {
        cout << s << endl;
        strings.push_back(s);
    }

    cout << s;  // ECHO CONTENTS
    std::cin.ignore();  // pause
    return 0;
}

使用此代码,我的控制台保持空白,没有显示任何数据。 我拆分的完整字符串是:

"notepad://amount=10320.53||session_id=7946548443287465/" 

我想要的结果是得到一个数组,它使用 "amount" 和 "session_id" 作为键,它们的值作为值。

实现此目标的最佳方法是什么?

我使用以下代码在我的控制台中实际显示了正在运行的字符串:

int main(int argc, char **argv)
{
    string contents = file_get_contents("config.txt");
    cout << contents;   // ECHO CONTENTS
    std::cin.ignore();  // pause
    return 0;
}

这展示了如何使用正则表达式来提取您想要的信息,网上有很多关于如何正确读取文件的资源,所以我省略了那部分。

#include <iostream>
#include <regex>
#include <unordered_map>
#include <string>

int main(int argc, char **argv)
{
    std::regex pattern("amount=([[:digit:]\.]*)\|\|session_id=([[:digit:]]*)");
    std::smatch results;
    std::unordered_map<std::string, std::string> data;

    std::string contents = "notepad://amount=10320.53||session_id=7946548443287465/";
    //string contents = file_get_contents("C:/wamp/www/cmd/file.txt");
    if(std::regex_search(contents, results, pattern))
    {
        data["amount"] = results[1];
        data["session_id"] = results[2];
    }
    std::cout << "Amount: " <<  data["amount"] << std::endl;
    std::cout << "Seesion ID: " << data["session_id"] << std::endl;

    return 0;
}