C++编辑文本文件



我正在创建这个简单的程序,这会节省我很多时间,但我有点卡住了。

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

所以,它现在所做的只是复制一个文件。但我已经尝试过了,所以它改变了生活。从"function"到"def",我已经尝试了所有的东西,并在谷歌上搜索过,找不到足够有用的东西,我发现的唯一一件事是使用sstream,但它根本不起作用,或者可能我只是不够熟练,所以如果有人能给我任何提示或帮助,因为我真的被卡住了?:d

boost有一个replace-all函数,它比朴素的搜索-替换-重复算法效率高得多。这就是我要做的:

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

我并没有真正理解你的问题。我认为你需要编辑你的帖子并问清楚。

但是,您仍然可以对代码进行一个重大改进。您应该使用C++流读取文件,如下所示:

while (getline(oldfile, line))
{
    tempfile.push_back(line + "n");
}

这是使用C++流读取文件的更惯用的方式!

阅读@Jerry Coffin(SO用户)的精彩博客:

http://coderscentral.blogspot.com/2011/03/reading-files.html


编辑:

您想查找并替换文件中的文本,然后在本主题中查看已接受的答案:

  • 字符串替换为C++

试试这个http://www.boost.org/doc/libs/1_46_1/libs/regex/doc/html/boost_regex/ref/regex_replace.html,http://www.cppreference.com/wiki/string/basic_string/replace

相关内容

  • 没有找到相关文章

最新更新