C ++ Редактировать текстовый файл? - PullRequest
0 голосов
/ 07 июня 2011

Я создаю эту простую программу, которая сэкономила бы мне много времени, но я немного застрял.

#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», я все пробовал и уже гуглил, не мог найти ничего достаточно полезного, единственное, что я нашел, это использование sstream, но в конце концов это не сработало, или, может быть, я простоне достаточно опытный, чтобы сделать это, поэтому, если кто-нибудь может дать мне какие-либо советы или помощь, потому что я действительно застрял?: Д

Ответы [ 3 ]

1 голос
/ 07 июня 2011

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

1 голос
/ 07 июня 2011

Я не совсем понял вашу проблему.Я думаю, вам нужно отредактировать свой пост и четко спросить его.

Но все же вы можете сделать одно существенное улучшение в своем коде.Вы должны читать файл, используя поток C ++, следующим образом:

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

, что является более идиоматическим способом чтения файла с использованием потока C ++!

Прочитайте этот превосходный блог @Jerry Coffin (SO user):

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


РЕДАКТИРОВАТЬ:

Вы хотите найти и заменить текст в своем файле, а затем увидеть принятый ответ в этой теме:

0 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...