In bestimmte Zeile schreiben
-
Ich will z.B. in Zeile 5 was schreiben.. wie mach ich das?
also eine textdatei sieht z.B. so aus:
1231111
12322
12311111
12322
12355
1234jetzt soll in die 5. Zeile z.B. ein "a" hinzugefügt werden .. wie?
-
Mein banaler Vorschlag wäre, dass du die ersten vier Zeilen mit getline ausliehst und dann liest du die Zeichen einzeln mit der get Funktion ein und wenn es nicht das Zeilenumbruchszeichen ist ersetzt du es mit put.
Hier die Funktionen in der C++ Referenz:
http://www.cplusplus.com/reference/iostream/istream/getline.html
http://www.cplusplus.com/reference/iostream/istream/get.html
http://www.cplusplus.com/reference/iostream/ostream/put.htmlEdit:
Schuldigung hab nicht gründlich bis zum Ende deines Beitrages gelesen.
In einer Textdatei kannst du am Ende einer Zeile nicht einfach ein neues Zeichen einfügen, sondern du musst alle Zeilen um die Länge deiner hinzuzufügenden Zeichenkette nach hinten verschieben.
Also wenn du in der 5. Zeile noch einen Wert ranhängen willst musst du ab der 5. Zeile alle Zeilen einlesen und speichern, dabei solltest du schon die Zeigerposition für den Anfang der 5. Zeile mit tellg() speichern. Nach dem du alle Zeilen eingelesen hast springst du an den Anfang der 5. Zeile und am Ende wo sich das Zeilenumbruchzeichen befindet ersetzt du dieses mit der put-Funktion und fühgst dein 'a' ein. Danach musst du an die nächste Stelle wieder das Zeilenumbruchszeichen einfügen und dann kannst du alle gespeicherten weiteren Zeilen in die Datei schreiben.
-
sry ich bekomms einfach nciht auf die reihe..
könntest du mir ein kleines beispiel prog machen?
-
madu schrieb:
sry ich bekomms einfach nciht auf die reihe..
könntest du mir ein kleines beispiel prog machen?Zeig mal was du hast, dann zeigen wir dir, was nicht funktioniert.
Die Referenz hilft hier sicher enorm, wenn du mal die Beispiele anschaust/machst.
-
hmmm naja allgemein dieses getline etc. is nicht nach meinen wünschen, ich will in einer datei was suchen und ggf. daten austauschen
z.B.
sjdskdjs
sdjskdsd
ksdsssddd
ksdjksd
jetzt soll z.B. sss durch "aaa" ersetzt werden..
ich hab blos das problem mit dem source..
ich habs die ganze zeit mit !eof ausprobiert.. aber es klappt nicht..
k.A. gibts nciht ne einfachere lösung?
-
In dateien "einfach so" etwas austauschen ist nicht. In den Speicher lesen -> ändern -> zurückschreiben.
cheers, Swordfish
-
Hier mal nen grober Ablauf, vielleicht hilfts dir weiter um den Einsatz von getline und den anderen Funktionen zu verstehen:
#include <iostream> #include <fstream> using namespace std; int main() { char zeile[100]; //Array zum einlesen einer Zeile in txt Datei fstream textdatei; textdatei.open("Textdokument.txt", fstream::in | fstream::out); textdatei.getline(zeile, 100); //Einlesen einer Zeile aus der txt Datei for(int i=0;i<100;i++) { //Modefizierung einer eingelesenen Zeile durch Zeichenweises vergleichen mit gesuchtem Zeichen } textdatei.seekp(0,ios_base::beg); //Zeiger wieder an den Anfang setzen, weil nach dem einlesen der ersten Zeile //befindet dieser sich am Anfang der zweiten Zeile in der txt Datei textdatei.write(...); //Erste Zeile kann nun mit dem Einsatz der write funktion ersetzt werden textdatei.close(); return 0; }
Wie die anderen schon vor mir geschrieben haben, besteht die Lösung der Aufgabe darin:
1. Zeilenweise die Datei in den Speicher zu lesen
2. die Zeichenkette wie gewünscht zu modefizieren
3. dann die geänderte Zeile wieder in die Textdatei zu schreiben
-
nicht wirklich, denn getline ist in meinem programm nciht notwenig, weil ich die anzahl der zeihlen habe.. ich lasse vorher zeilenweise in die datei reinschreiben & zähle gleichzeitig die ganzen zeilen etc.
bzw das könnte ich genauso gut mit eof lösen oder?
das problem was ich habe ist eher, in eine bestimmte zeile zu schreiben..
ich habe es mit fseek ausprobiert..
aber da wird IMMER die 1. zeile genommen..
bedeutet wenn ich ich fseek auf 9 setze die zeile aber nur 2 buchstaben hat geht das nciht automatisch in die 2. zeile über..
und das is bei mir das problem..
wobei ich jetzt bemerkt habe, das es eigentlich doch einfacher gehen könnte..
meine einträge sehen so aus:
aaaaaa:bbbbbbrbbbbt
ajsdjasdn:cccccccdccct
etc. die anzahl der zeichen nach : sind immer gleich
nun könnte ich doch die ganze datei auslesen in einen string und dann nach einen eintrag suchen und den ersetzen etc.ich hatte das auch probiert aber k.A. ich probier das später nochmal aus..
hmm schon komisch, wie schwer es ist in eine bestimmte zeile zu schrieben o.O