# String in Datei suchen und ersetzen



## sand13r (9. März 2009)

Hiho liebe Freunde der Sonne,

das gibt es doch nicht, 
man merkt das Montag ist..es will einfach noch nicht so wirklich klappen.

Ich kriege es nicht hin aus einer txt Datei nach einem  String zu suchen und diesen
dann zu ersetzen.
Mein Problem ist wohl das ich zu viele verschiedene Möglichkeiten mische und somit auf keine Lösung komme.
Oder ich einfach auf dem Schlauch stehe.. oder doch hätte Bäcker werden sollen 

Habe es glaube ich schon fast nur das schreiben in die Datei geht nicht
habe es mit fwrite() versucht will er aber nicht

```
FILE * pFile;
    char c = 0;
    int i  = 0;
    int k=1;
    fpos_t pos;

   pos=0;
   pFile = fopen ("test.txt","r+");

  fsetpos(pFile,&pos); 
        while ((c = fgetc(pFile)) != EOF) 
        {
            if ((char) c == '*') 
            {                      
               // diesen ersetzten an der stelle wo gefunden (auch mehr als ein Zeichen)
               
            }  
        
        }
```

kann doch nicht sein^^ war denn alles umsonst 
hat jemand ne Idee, ist eigentlich echt zu einfach .. aber ich krieg es grad nicht hin x_X


wäre toll 

danke

sand13r


----------



## deepthroat (9. März 2009)

Hi.

Wenn du gerade etwas gelesen hast und das Gelesene ersetzen willst, dann mußt du wieder zurückgehen an die Position wo du begonnen hast zu lesen.

Dir ist aber schon bewußt, dass du dort nur etwas überschreiben, aber nichts einfügen kannst!?

Gruß

PS: Du hast vergessen den Zeiger pmcoder zu initialisieren, außerdem finde ich es ziemlich bedenklich, das man öffentlich auf den QuestionString eines MCoders zugreifen kann...


----------



## sand13r (9. März 2009)

Hehe ^^

du bist lustig  du gefällst mir  

Hmm das is aber blöd das ich da nichts einfügen kann 
dann bringt mir das ja nix.. ich kann also ein * nicht durch ein 12 ersetzen ?
kann ich mir ja schon fast net vorstellen..


----------



## deepthroat (9. März 2009)

sand13r hat gesagt.:


> Hmm das is aber blöd das ich da nichts einfügen kann
> dann bringt mir das ja nix.. ich kann also ein * nicht durch ein 12 ersetzen ?


Nein, kann man nicht. Das Thema gab's auch schon ein paar mal.

Am einfachsten ist es eine neue Datei anzulegen und mit neuen Inhalt zu erstellen.

Oder, falls die Datei die du ändern willst nicht zu groß ist, diese vollständig in den Speicher lesen, nochmal neu im Modus "w" zu öffnen und den veränderten Text reinzuschreiben.

Gruß


----------



## Ryu1991 (9. März 2009)

Wie wäre es damit:
Du scannst den gesamten Text in ein String-Object. Dann benutzt du die substring, oder eine der Find Methoden und anschließend benutzt du die replace-Methode. Am Schluss überschreibst du einfach den Inhalt der Textdatei mit dem Inhalt deines Strings.
Fertig.

Achja, um mit Dateien zu arbeiten empfehle ich die fstream klasse


----------



## sand13r (9. März 2009)

Ok, danke!
dann werd ich es wohl anders lösen müssen
@Ryu1991

Das geht glaub so nicht weil nicht jedesmal das selbe dranstehen soll
die ersten 6 * sollen eine 1 sein die nächsten 6 * eine 2 usw. 
ginge das mit deiner Methode auch so ohne weiteres ?

Gruß


----------



## Ryu1991 (9. März 2009)

Meinst du, du hast einen Text, der ganz banal so aussieht "blabla*6ahahah*6blablubb"
und daraus soll "blabla1ahahah2blablubb" werden?
Ich bin mit nicht sicher, ob ich dich verstehe. Falls ja, dann ja. Die find() - Methode von std::stiring gibt immer den ersten Treffer zurück, d.h. du kannst ihn mehrfach nach *6 suchen lassen, beim ersten mal ersetzt du es durch 1, beim zweiten mal durch 2.


----------

