Elimina de un archivo todas las apariciones de un fragmento de texto

Lo mejor de saber programar es que cuando necesitas un programa muy concreto te lo puedes hacer tu, y este seguramente lo hayamos necesitado alguna vez.

Al programa le pasas 2 parámetros, el primero el nombre del archivo de texto (txt, html... cualquiera que se pueda abrir con el notepad), y el segundo es el texto o palabra que quieres quitar (si lleva espacios ponlo entre comillas).

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
    if (argc < 3)
    {
        cout << "QuitaPalabras.exe filename text" << endl;
        return 1;
    }
    int wsize = strlen(argv[2]);

    ifstream in(argv[1],ios::binary);

    in.seekg(0,ios::end);
    long size = in.tellg();
    in.seekg(0,ios::beg);
    size -= long(in.tellg());

    char * buffer = new char [size];

    in.read(buffer,size);
    in.close();

    int i=0,j=0;
    while (i<size)
    {
        int k = 0;
        while (k<wsize && buffer[i+k] == argv[2][k]) k++;
        if (k<wsize)
            buffer[j++] = buffer[i++];
        else
            i+=wsize;
    }

    ofstream out(argv[1],ios::binary);
    out.write(buffer,j);
    out.close();

    return 0;
}

Comentarios