拆分读取文件C ++

时间:2015-10-13 12:12:41

标签: 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/" 

我想要的结果是获得一个使用&#34; amount&#34;的数组。和&#34; session_id&#34;作为键及其值作为值。

实现这一目标的最佳方式是什么?

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

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

1 个答案:

答案 0 :(得分:1)

这显示了如何使用正则表达式来提取所需的信息,有很多关于如何正确读取文件的在线资源,所以我把这部分留了出来。

#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;
}