Aus Textdatei lesen und in Varaible schreiben
-
Hallo,
ich weiss nicht ob das hier rein gehört, aber ich bin guter Dinge.Da ich zur Zeit ein kleines Textadventure schreibe, darf die Funktion des Speichern und Ladens natürlich nicht fehlen...
Speichern in eine Textdatei läuft prima, aber von der Textdatei wieder in die Variable bekomme ich nicht hin.
Kann mir jemand den Source (unbedingt in C) geben, wie ich eine Zeile aus der Textdatei(nur Zahlen) in eine Variable packe?
Danke!
-
#include <stdio.h> #define FILNAM "TEST.TXT" #define BUFLEN 80 void main() { FILE *file; char buf[BUFLEN]; /* Datei Öffnen */ pfile = fopen(FILNAM, "w"); if(!pfile) { printf("Kann Datei leider nicht oeffnen\n"); return; } /* Text in Datei schreiben */ fprintf(pfile, "Erste Zeile\n"); fprintf(pfile, "Zweite Zeile\n"); fprintf(pfile, "Dritte Zeile\n"); /* Datei schliessen */ fclose(pfile); /* Datei zum lesen öffnen */ pfile=fopen(FILNAM, "r"); if(!pfile) { printf("Kann datei leider nicht oeffnen.\n"); return; } /* Datei aufm Bildschirm ausgeben */ fscanf(pfile, "%s", buf); printf(buf); fscanf(pfile, "%s", buf); printf(buf); fscanf(pfile, "%s", buf); printf(buf); /* Datei schliessen */ fclose(pfile); }
So geht das alles
-
Danke für deinen Beitrag, nur hilft er mir nicht sehr viel weiter...
Er speicher und liest zwar aus , aber er soll es nicht ausgeben, sondern in eine Variable speicher!
Ich mache gerade ein kleines Spiel und da werden beim speicher die variablen gespeichert und sollen, wenn man das savegame lädt wieder in die variablen gepackt werden.
-
lol
Also er gibt ja nur aus weil er hinter dem auslesen mit fscanf() noch ein printf() dran hat. Das kannst du einfach löschen dann gibts auch keine Ausgabe mehr. Gespeichert wird - wie leicht erkennbar - in die Variable buf
MfG SideWinder
-
Hilft mir immer noch nicht, da dei Zahlen in eine int-Variable gespeichert werden soll und nicht als Text(char).
Wenn Du mir sagen kannst, wie ich das hinbekomme, wäre ich Dir sehr dankbar...
-
Naja entweder du gibst bei fscanf() statt %s eben %d an für einen dezimalen Integer und dahinter eine Integervariable statt dem char-Array buf oder du wandelst nach dem Auslesen mit atoi() den Buffer in einen Integer um...
MfG SideWinder
-
Hi,
int main() { }
ist das nicht falsch (ich meine für C, nicht für C++)-
müsste es nichtint main(void) { }
heißen?
-
lol, nein das ist vollkommen egal
MfG SideWinder
-
Hatte mal gerade so einen flash:
#include <stdio.h> int holeZwischenstand (FILE * pfile, char filename[]) { int buf; pfile = fopen(filename, "r"); if (!pfile) { printf ("Fehler beim oeffnen von: %s", filename); return 0; /* was besseres fiel mir nicht ein ... */ } fscanf(pfile, "%d", buf); fclose (pfile); return buf; }
Juhu!! (Entschuldigung, aber ich finde das Design und das Syntaxcolouring dieser Seite so toll)
mfG, the flyingCoder.
EDIT: Anzahl der "fscanf (pfile, "%d", buf);" gekürzt. So richtiger?
-
flyingCoder schrieb:
Hatte mal gerade so einen flash:
#include <stdio.h> #define BULFEN 80 int holeZwischenstand (FILE * pfile, char filename[]) { char buf[BUFLEN]; pfile = fopen(filename, "r"); if (!pfile) { printf ("Fehler beim oeffnen von: %s", filename); return 0; /* was besseres fiel mir nicht ein ... */ } fscanf(pfile, "%d", buf); fscanf(pfile, "%d", buf); fscanf(pfile, "%d", buf); /* Anzahl je nach belieben*/ fclose (pfile); return buf; }
Juhu!! (Entschuldigung, aber ich finde das Design und das Syntaxcolorin dieser Seite so toll)
mfG, the flyingCoder.
-> Autsch!!!
Edit bzw. PS: Schreibst du gerne wild im Speicher rum? (-> fscanf(pfile, "%d", buf); )@PranKe
Du könntest das ganze auch noch so lösen:... struct ladenspeichern { char text[100]; int zahl; int zahl2; int zahl3; char text2[50]; }; ... FILE *fp; struct ladenspeichern ls; //Werte initialisieren strcpy(ls.text, "Erster Text."); ls.zahl = 5; ls.zahl2 = 10; ls.zahl3 = 500; strcpy(ls.text2, "Zweiter Text."); //Speichern fp=fopen("daten.dat", "wb"); if(fp) { fwrite(ls, sizeof(struct ladenspeichern), 1, fp); fclose(fp); } //Laden fp=fopen("daten.dat", "rb"); if(fp) { fread(&ls, sizeof(struct ladenspeichern), 1, fp); fclose(fp); } ...
Einfach, schnell, kompakt
-
AJ schrieb:
-> Autsch!!!
Edit bzw. PS: Schreibst du gerne wild im Speicher rum? (-> fscanf(pfile, "%d", buf); )Ich hatte den Teil einfach von foRaver übernommen ... Sehe jetzt aber erst, was das für ein großer Schwachsinn war
Werde es gleich mal ändern ...