Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Buchstaben in Datei ersetzen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.03.2008, 15:48 Uhr
HansGeorg



Hallo,

ich möchte gerne Buchstaben in einer Datei ersetzen, aber ich möchte auch das ß durch ss ersetzen.

die Textdatei ist ~ 50 MB groß und ich möchte es vermeiden sie immer komplett einzulesen.

Ich will mit FStream arbeiten, weiß aber nicht wie ich es machen soll, wenn ich 1 Zeichen durch 2 ersetzen soll.

Wäre echt sehr dankbar wenn Ihr mir helfen könntet

Gruß und Danke

Hans
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.03.2008, 17:45 Uhr
Oliver
S2-Pixelgeneral


Du könntest z.B. die Originaldatei zeilenweise einlesen, in den std::strings das Zeug durch replace ersetzen und das ganze parallel in eine temporäre Datei schreiben und die dann am Schluss ggf. halt umbenennen und die alte löschen.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.03.2008, 18:17 Uhr
HansGeorg



Ahja. Stimmt das wäre eine möglichkeit, denn mit bringt da der Modus zum direkten Überschreiben nichts, denn man kann ja einzelne Zeichen direkt in der Datei überschreiben, wie das geht, weiß ich im moment leider nicht mehr, man braucht auf jedem fall einen Fstream

fstream test
test.open("Dateiname.txt", ios::in | ios::out | ios::app);

Aber was ich dann weiter machen müsste weiß ich nicht, ich hab bislang noch nichts ersetzen müssen.

wie mache ich das wenn direkt in einer datei nur 1 zeichen ersetzen möchte ohne temporäre datei?

ich weiß es geht, mit dem alten C fopen gings ja damals auch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.03.2008, 01:03 Uhr
~willy
Gast



Zitat von HansGeorg:

wie mache ich das wenn direkt in einer datei nur 1 zeichen ersetzen möchte ohne temporäre datei?


Unter Window z.B. so:

C++:
#include <fstream>

int main()
{
    using namespace std;

    char* auszutauschen = "e";
    char* ersatz = "X";
    
    fstream einlesen("c:\\test.txt");
    fstream schreiben("c:\\test.txt");

    char tmp;

    while (einlesen.good())
    {
        
        einlesen.read(&tmp, 1);
        if (tmp == *auszutauschen)
        {
            schreiben.write(ersatz,1);
        }
        else
        {
           schreiben.write(&tmp, 1);
        }
    }
    
    return 0;
}




und Du wolltest "ß" durch "ss" ersetzen. Eine Möglichkeit wäre:

C++:
#include <fstream>
#include <deque>
int main()
{
    using namespace std;

    const char auszutauschen = 'ß';
    const char ersatz = 's';
    
    fstream einlesen("c:\\test.txt");
    fstream schreiben("c:\\test.txt");

    deque<char> temp;
    char tmp;

        while (einlesen.good())
        {
            einlesen.read(&tmp, 1);
        
            if (tmp == auszutauschen)
            {
                 temp.push_back(ersatz);
                temp.push_back(ersatz);
             }
            else
            {
                temp.push_back(tmp);
            }
            schreiben.write(&temp[0], 1);
            temp.pop_front();
        }
    }
    
        schreiben.write(&temp[0], static_cast<unsigned>(temp.size()));
    
    return 0;
}



MfG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: