Ein / Auslesen in txt Datei
-
Hallo,
ich bin noch nen ziemlichr Anfänger was C++ angeht.
Trotzdem sitz ich hier schon etwas länger und komme einfach nicht weiter#include <cstdlib> #include <iostream> #include <string.h> #include <windows.h> using namespace std; int main(int argc, char *argv[] ) { FILE *fp; int nummer; fp = fopen("C:\\test.txt", "r"); if (fp!=NULL) { cout<<"exist"; fscanf(fp, "%d", &nummer); nummer == nummer + 1; fprintf(fp, "nummer %d\n", nummer); } else if (fp==NULL) { cout<<"not exist"; fp = fopen("C:\\test.txt", "w+"); fprintf(fp,"1"); } cin.get(); }
Nun ja, ich habe Programm, welches mir eine test.txt erstellt und in diese den Wert 1 einfügt. Das ist die ELSE Anweisung und diese klappt Prima.
Doch wenn diese Datei schon existiert soll er den Wert 1 in die Variable NUMMER schreiben und diesen immer um eins erhöhen,
sodass bei jedem Programmstart der Wert NUMMER + 1 in der Test.txt Datei steht. Also 1... 2... 3... (aber immer nur eine Zahl).
Doch steht in meiner Datei leider immer nur 1.
Woran kann das liegen ???
-
1. Arbeite mit if/- fstreams
2. Überprüfe den Wert, nicht das Filehandle
3. Inkludiere nur die Libs, die du brauchst
4. Überprüfe, ob dein File geladen wurde
5.nummer == nummer + 1
geht nicht; nummer += 1; ++nummer
6. Beachte das du ein Handle im read-Modus angelegt hast ("r")Check die Punkte eben bei dir, dann sollte es funktionieren.
(btw: Rücke deinen Code doch bitte vernünftig ein)
-
6. Beachte das du ein Handle im read-Modus angelegt hast ("r")
Das habe ich doch schon zu anfag gemacht oder muss dis an einer anderen stelle passieren??
3. Inkludiere nur die Libs, die du brauchst
Klingt logisch^^
5. geht nicht; nummer += 1; ++nummer
Wohl ein Syntaxfehler, habe vorher Pascal und VB programmiert.
1. Arbeite mit if/- fstreams
Sorry aber kann mir darunter genzlich wenig vorstellen und weiß auch nicht wie das funktionieren soll, wie gesagt kann ich etwas VB und dort ist es ähnlich wie
File = fopen (..., "r")
2. Überprüfe den Wert, nicht das Filehandle
Mit
if (fp!=NULL)
will ich überprüfen ob die Datei existiert. Mag schwachsinnig sein aber in Vb wars einfacher. Da gabs sowas wie if exist ...
4. Überprüfe, ob dein File geladen wurde
Wie soll das gehn ??
Wenn die datei existiert wird sie doch auch automatisch geladen oder??
Und wenn sie nicht existiert wird dies mit der ELSE Abzweigung abgefangen.(btw: Rücke deinen Code doch bitte vernünftig ein)
Das hatte meinen Informatiklehrer schon zur Weißglut gebracht
Bitte nicht so streng mit mir sein wie gesagt ich bin noch ziemlicher anfänger
-
Das habe ich doch schon zu anfag gemacht oder muss dis an einer anderen stelle passieren??
Ich weiss gerade selber nicht was passiert wenn man einen unpassenden Parameter in den Standard I/O-Operationen angibt. Du solltest ein Filehandle zum schreiben und einen zum lesen benutzen.
Sorry aber kann mir darunter genzlich wenig vorstellen und weiß auch nicht wie das funktionieren soll, wie gesagt kann ich etwas VB und dort ist es ähnlich wie...
Ok, gut, die genannten Streams sind praktisch gesehen die "neueren" Input/Output-Verfahren um Dateien zu laden/schreiben. Falls du also nicht nur in C programmierst, solltest du die neueren Methoden nutzen. Google liefert ziemlich tolle Ergebnisse (-;
Mag schwachsinnig sein aber in Vb wars einfacher.
Ich weiss nicht wie es in VB ist, ich weiss nur das ich es nicht mag.
Wie soll das gehn ?? Wenn die datei existiert wird sie doch auch automatisch geladen oder??
Natürlich und was ist wenn nicht? Du hast das im Prinzip schon richtig gemacht. Du überprüfst das Handle einfach ob es leer ist. Sprich:
FILE *File = NULL; File = fopen(...); if(File == NULL) fclose(File); else std::cout<<"War nix!"<<std::endl;
Und wenn sie nicht existiert wird dies mit der ELSE Abzweigung abgefangen.
Richtig, trotzdem wird dein Handle nicht geschlossen.
Zur Formatierung:
Machs halt so, dass alles wie in einer Hierachie strukturiert ist. Immer den gleichen Abstand und immer gleiche Zeilenumbrüche wenns geht. Und Funktionsrümpfe am Besten immer mit dem Tabulator einmal einrücken. Jeder hat seinen eigenen Stil, aber so in etwa solltest du es machen unm deinen eigenen zu finden.
-
Soll das C oder C++ werden?
Wenn C, dann übersetze die C++ Fragmente nach C.
Oder soll das C++ Quelltext sein, warum nimmst du dann für
die Ansprache der Datei keine Streams?Die letzte schliessende Klammer steht in der Regel am Anfang
einer Zeile
-
Folgender Quellcode bietet noch einige Verbesserungsmöglichkeiten:
#include <iostream> // Standardstream-Funktionaliät einbinden #include <fstream> // ofstream und ifstream einbinden using namespace std; int main(void) { ifstream Quelldatei; // neuen Lese-Stream erzeugen Quelldatei.open("Datei_1.txt", ios_base::in); if (!Quelldatei) // Fehler beim Öffnen? { char num; ofstream Quelldatei("Datei_1.txt"); Quelldatei.put(num = '1'); } else { char c; Quelldatei.get(c); // Lesen ofstream Zieldatei("Datei_1.txt"); if (!Zieldatei) // Fehler beim Öffnen? cerr << "Ausgabe-Datei kann nicht geöffnet werden\n"; else { c++; Zieldatei.put(c); // ... in die Zieldatei schreiben. } } return 0; }