直接上代码,YFile只不过是对fstream的封装
#include <iostream>
#include <string>
#include <regex>
using namespace std;
string ReadFileData(const string &strFile);
string RegReplace(const string &data, const string &strKey, const string &strValue);
void WriteFileData(const string &strFile, const string &strData);
void string_replace(std::string &strBig, const std::string &strsrc, const std::string &strdst)
{
std::string::size_type pos = 0;
std::string::size_type srclen = strsrc.size();
std::string::size_type dstlen = strdst.size();
while ((pos = strBig.find(strsrc, pos)) != std::string::npos)
{
strBig.replace(pos, srclen, strdst);
pos += dstlen;
}
}
/*
argv[0]
argv[1] File location
argv[2] regexp
argv[3] the stuff u need to replace
*/
int main(int argc,char *argv[])
{
string data = ReadFileData(argv[1]);
if (data.empty())
{
cout << "ReadFileData Error!" << endl;
return -1;
}
data = RegReplace(data, argv[2], argv[3]);
if (data.empty())
{
cout << "RegReplace Error!" << endl;
return -1;
}
WriteFileData(argv[1],data);
return 0;
}
string ReadFileData(const string &strFile)
{
YFile file(strFile.c_str());
file.Open(READONLY);
auto strData = file.ReadAll();
file.Close();
return strData;
}
string RegReplace(const string &data,const string &strKey, const string &strValue)
{
string strKey2 = strKey;
string strResult;
regex reg(strKey2);
smatch result;
if (!regex_search(data, reg))
{
return "";
}
strResult = regex_replace(data, reg, strValue);
if(strResult.empty())
{
return "";
}
return strResult;
}
void WriteFileData(const string &strFile,const string &strData)
{
YFile file(strFile.c_str());
file.Open(WRITEONLY);
file.Write(strData.c_str());
file.Close();
}
更多文章:http://blog.csdn.net/what951006?viewmode=list
powered by:小乌龟在大乌龟背上