分割读取文件C++

问题描述:

让我们从头开始,我对C++完全没有经验,但是我得到了这个项目来连接一个POS和一个verifone。我们没有标准的验证SDK,但有一些自定义的。分割读取文件C++

首先,我需要准备好要发送到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/" 

,我想要的结果是获得一个使用“量”和“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; 
} 
+0

这听起来像你可能需要学习如何使用调试器来逐步通过你的代码。使用一个好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏离的位置。如果你打算做任何编程,这是一个重要的工具。进一步阅读:** [如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

您使用的是哪种C++版本?如果你使用C++ 11,你可以使用[正则表达式](http://www.cplusplus.com/reference/regex/)。 – Schrieveslaach

+2

'while(contents,s,'||')'这个条件应该做什么? –

这显示了如何使用正则表达式来提取所需的信息,那里有很多的网上资源如何正确读取文件,所以我把这部分留下了。

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

不知怎的,这是我的激活的反病毒和删除我的.exe .... – killstreet

+0

@killstreet这是奇怪的,这个代码不访问文件或任何东西的本身之外这里http://ideone.com/CBBnpP –

+0

@killstreet行:如果(std :: regex_search(contents,results,pattern))导致错误发生,试图检查它为什么会这样做。 –