分割读取文件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;
}
这显示了如何使用正则表达式来提取所需的信息,那里有很多的网上资源如何正确读取文件,所以我把这部分留下了。
#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;
}
不知怎的,这是我的激活的反病毒和删除我的.exe .... – killstreet
@killstreet这是奇怪的,这个代码不访问文件或任何东西的本身之外这里http://ideone.com/CBBnpP –
@killstreet行:如果(std :: regex_search(contents,results,pattern))导致错误发生,试图检查它为什么会这样做。 –
这听起来像你可能需要学习如何使用调试器来逐步通过你的代码。使用一个好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏离的位置。如果你打算做任何编程,这是一个重要的工具。进一步阅读:** [如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
您使用的是哪种C++版本?如果你使用C++ 11,你可以使用[正则表达式](http://www.cplusplus.com/reference/regex/)。 – Schrieveslaach
'while(contents,s,'||')'这个条件应该做什么? –