Gelöst: .txt Datei Zeile ändern
-
Hallo,
ich habe mittels:#define LAENGE 1000 #define ANZAHL 1000 int intline=5; //zeile 5 int i=0; char line[LAENGE][ANZAHL]; FILE * pFile; extern string topicpath; pFile=fopen(topicpath.c_str(),"r"); if (pFile!=NULL) { for(i = 0; i <= intline;i++) { if ((fgets(line[i],LAENGE,pFile) != 0)&&(i==intline)) { stringbuffer=line[i]; } } fclose (pFile); } }zeile 5 ausgelesen...
diese enthält ca. "5.1 Frühling;5.2 spring;5.3 1;5.4 1277737728."
danach hab ich sie in "5.1 Frühling;5.2 spring;5.3 2;5.4 1277739000." geändert ...
bis hierhin hat alles problemlos geklappt ->
mein poblem: wie kann ich diesen barbeiteten string an zeile 5 meiner txt datei schreiben?
MfG Lukas
-
Der Ansatz ist für C. Aber auch für C wäre der zweifelhaft: einfach mal 1 MB ungeachtet der tatsächlichen Zeilenanzahl und Zeilenlängen auf dem Stack belegen kann man nicht wirklich bringen.
Ein C++-Umsetzung sieht so aus:
#include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; int main() { //Datei öffnen ifstream inFile("file.txt"); //in lines speichern wir unsere Zeilen vector<string> lines; //temporärer String für die aktuelle Zeile string line; //solange noch alles paletti ist und Daten da sind... while (inFile.good()) { //...lese eine Zeile ein und füge sie lines hinzu getline(inFile,line); lines.push_back(line); } //ändere die fünfte Zeile lines[4]="changedLine"; //Datei schließen inFile.close(); //und im Schreibmodus wieder aufmachen, dabei auf 0 bytes reduzieren (trunc) ofstream outFile("file.txt",ios::trunc); //alle Zeilen in die Datei schreiben for (vector<string>::iterator it=lines.begin();it!=lines.end();++it)outFile << *it << '\n'; }/*bzw. auto it=...*/Edit: kommentiert.
-
Athar schrieb:
}/*bzw. auto it=...*/was ist mit auto gemeint?
-
auto ist ein Schlüsselwort des kommenden C++-Standards und veranlasst den Compiler, selbst den richtigen Typ zu bestimmen.
Ich habe es nur als Kommentar angemerkt, weil auto bei älteren Compiler-Versionen noch nicht verfügbar ist.
-
hay,
sry, dass ich um dieses vorgekaue bitte... aber könntest du den geposteten code vl anfängerfreundlich kommentieren
... ich hatte davor nur in autoit programmiert (was mir weitaus leichter erschien/erscheint) -> der wechsel zu c++(bzw. winapi) fällt mir ziemlich schwer, da ich kein buch besitze und man via google oft falsches (bzw c findet , dass als c++ ausgegeben wird) ... was ist ein vektor? ich kenn das bis jetzt nur aus dem schul mathe unterricht
MfG Lukas
-
Und genau das ist auch ein Vektor in der Programmierung, nur dass man nicht auf nummerische Werte beschränkt ist, sondern einen Vektor letztendlich wie eine Art Liste benutzen kann.
Es gibt hier im Forum einige hilfreiche Beiträge, welche Bücher man lesen sollte. Eines davon war glaub ich auch ein OpenBook... Einfach mal nachschauen... Wobei man um gute Fachliteratur nicht drum herum kommt. Zudem hat C oder auch C++ nur bedingt was mit der WinAPI zu tun, nämlich nur wenn du Windows spezifische Programme, mit den vom OS bereitgestellten Funktionen programmierst.
Es gibt auch das eine oder andere WikiBook, was nicht sooo schlecht ist, jedoch meistens auch immer hier und da ein bisschen "incomplete".
-
ifstream ist eine Klasse, um Dateien zu lesen.
ofstream ist eine Klasse, um Dateien zu schreiben.
string repräsentiert einen String.
vector ist eine Implementation eines dynamischen Arrays.Alles weitere zu Memberfunktionen & Co. steht in den verlinkten Seiten der C++-Referenz.
-
hay ich wollte mich mal für die nette hilfe bedanken

dank euch klappt jetzt alles und ich hab es sogar geschafft ein paar andere sachen anhand des beispiels zu ändern -> deswegen jetzt nochmal ne kleine frage:
ich möchte aus einem dokument nur eine bestimmte zeile lesen.
die unten stehende funktion klappt bestens, trotzdem wüsste ich gerne ob es die ideale lösung ist ... zu meinem ersten post hab ich ja sofort als antwort bekommen "Der Ansatz ist für C. Aber auch für C wäre der zweifelhaft: einfach mal 1 MB ungeachtet der tatsächlichen Zeilenanzahl und Zeilenlängen auf dem Stack belegen kann man nicht wirklich bringen. " <- verschwende ich hier auch unnötig platz? -> ich lese ja alles aus, will aber nur bis zeile "z.B. 4" ist das verschwendung von resourcen oder ok?int randomint; string frage; vector<string> lines; string line; extern string topicpath; ifstream inFile (topicpath.c_str()); while (inFile.good()) { //...lese eine Zeile ein und füge sie lines hinzu getline(inFile,line); lines.push_back(line); } inFile.close(); frage=lines[randomint];MfG Lukas