我正在创建这个简单的程序,这会节省很多时间,但我有点卡住了。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<string> tempfile;
string line;
ifstream oldfile("old.lua");
if (oldfile.is_open())
{
while (oldfile.good())
{
getline(oldfile, line);
tempfile.push_back(line + "\n");
}
oldfile.close();
}
else
{
cout << "Error, can't find old.lua, make sure it's in the same directory as this program, and called old.lua" << endl;
}
ofstream newfile("new.lua");
if (newfile.is_open())
{
for (int i=0;i<tempfile.size();i++)
{
for (int x=0;x<tempfile[i].length();x++)
{
newfile << tempfile[i][x];
}
}
newfile.close();
}
return 0;
}
所以,现在这样做只是复制一个文件。但我试过这样做,所以它改变了fe。每个“功能”一词到“def”,我已经尝试了所有东西并且已经googled,找不到任何有用的东西,只有我发现的东西是使用sstream,但它毕竟不起作用,或者我可能只是没有足够的技能,所以如果有人能给我任何提示或帮助,因为我真的被卡住了? :d
答案 0 :(得分:1)
我真的不明白你的问题。我认为你需要编辑你的帖子并清楚地问它。
但您仍然可以对代码进行一项重大改进。您应该使用C ++流读取文件,这样:
while (getline(oldfile, line))
{
tempfile.push_back(line + "\n");
}
这是使用C ++流读取文件的惯用方法!
阅读@Jerry Coffin(SO用户)的优秀博客:
http://coderscentral.blogspot.com/2011/03/reading-files.html
编辑:
您想在文件中查找并替换文本,然后在本主题中查看已接受的答案:
答案 1 :(得分:1)
boost有一个替换所有函数,它比天真的搜索 - 替换 - 重复算法更有效。这就是我要做的事情:
std::string file_contents = LoadFileAsString("old.lua");
boost::replace_all(file_contents, "function", "def");
std::ofstream("new.lua") << file_contents;
LoadFileAsString是我自己的函数,如下所示:
std::string LoadFileAsString(const std::string & fn)
{
std::ifstream fin(fn.c_str());
if(!fin)
{
// throw exception
}
std::ostringstream oss;
oss << fin.rdbuf();
return oss.str();
}
http://www.boost.org/doc/libs/1_33_1/doc/html/replace_all.html
答案 2 :(得分:0)