拆分读取文件 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;
}
让我们先说我完全没有使用 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;
}