# Variablen extern Speichern/Laden [dringend!!]



## cYe (18. November 2001)

Tach ans ganze forum !

Wie kann ich Variablen in einem Programm in eine extreme Datei
(z.B. *txt, oder anderes) speichern/exprotieren und wie kann ich
diese wieder in mein Programm einlesen ?

[eilt sehr, thx a lot]

cYe


----------



## Thomas Kuse (18. November 2001)

meinst du jetzt einfach daten in eine datei schreiben und dann wieder auszulesen?

das funzt mit fopen/fgetc/fputc/fclose ...

oder wie meinst du das genau?


----------



## cYe (18. November 2001)

Wenn ich jetz in einem Prog vom Benutzer eingegebene Werte
in Variablen speichere und der nutzer das Prog. beendet sollen die Variablenwerte in eine Datei (z.B. txt) gespeichert werden. Beim nächsten Programmstart soll das Programm die wieedr einlesen, sodas der Nutzer gleich seine Werte wieder hat ..

cYe


----------



## Thomas Kuse (18. November 2001)

```
#include <string.h>
#include <stdio.h>

int main(void)
{
   FILE *stream;
   char string[] = "This is a test";
   char msg[20];

   /* Öffnet eine Datei zur Aktualisierung */
   stream = fopen("DUMMY.FIL", "w+");

   /* Schreibt einen String in die Datei */
   fwrite(string, strlen(string), 1, stream);

   /* Setzt den Dateizeiger an den Dateianfang */
   fseek(stream, 0, SEEK_SET);

   /* Liest einen String aus der Datei */
   fgets(msg, strlen(string)+1, stream);

   /* Zeigt den String an */
   printf("%s", msg);

   fclose(stream);
   return 0;
}
```


mit fputs kann man das ganze auch reinschreiben

dann machst du pro zeile einfach einen wert

**edit**
wenn du '\n' an den string ranhängst dann machst du ein <enter>


----------



## cYe (18. November 2001)

Jomei, ich danke dir !


----------



## Thomas Kuse (18. November 2001)

sach ma dann ob du's hinbekommen hast


----------



## cYe (18. November 2001)

Naja, ich bastel noch drann *g*
Ich kappier zwar alles problemlos, bins aber nich
gewöhnt mit dem stdio.h zu arbeiten .. hatte sonst
immer nur auf basis des iostream.h gebastelt ..
von daher muss ich ma kuggn wie ich komm ..  außer
du hast nochwas dafür parat ?
.. cu cYe


----------



## cYe (19. November 2001)

Mh .. naja, irgentwie is da nur pampe rausgekommen ..
Wie gesagt, hab nur Newbee-Skill in der iostream.h 
Hier der Brei :


#include <iostream.h>
#include <string.h>
#include <stdio.h>

int main()
{
	FILE *stream;
	char test=' ';

	stream = fopen("ablage.fil","w+");
	fgets(test, strlen(test)+1, stream);

	if(test != ' ')
	{
		char eingabe[20];
		cout << "Eingabe (max. 20 Zeichen) :";
		cin >> eingabe;
		fwrite(eingabe, strlen(eingabe), 1, stream);
	}
	else
	{
		cout << "Guter Erfolg !" << endl
			 << endl
			 << test << endl;
	}
return 0;
}


Irgentwie nich so, was ich mir vorgesstellt hab, die einzellnen Befehle raff ich zwar noch, aber is halt alles bissel zu sehr stdio.h ..  Bei meinem gibts nur 2 Fehlermeldungen aus, die aber für mich noch um so unverständlicher klingen ) .. gibts da nich ne Methode mitder man das in richtung iostream.h hinbekommt oder weiß jmd was ich da oben falsch mache ? .. thx & cu
cYe


----------



## Thomas Kuse (19. November 2001)

funzt wirklich nich 

versuch mal statt fgets


```
do
   {
      /* Lesen eines Zeichens aus der Datei */
      ch = fgetc(stream);

      /* Anzeigen des Zeichens */
      putch(ch);
   } while (ch != EOF);
```

wenn du das damit auch nich hinbekommst setz ich mich ma richtig ran, hab das ja auch schon nen paarmal genutzt!


----------



## Xeragon (21. November 2001)

Die "iostream-Art" (d.h. die C++-Methode) wäre:


```
// Enthält die Definition von basic_fstream<>
#include <fstream> 

...
// std::fstream: Ein C++-Stream der Ein-/Ausgabe in Dateien erlaubt
// alternativ kann ich std::ofstream (nur zur Ausgabe) oder 
// std::ifstream (nur lesen) verwendet werden.
std::fstream file_stream;

// Öffnet eine Datei. Der erste Parameter ist der Dateiname, der
// zweite gibt den Modus an (hier schreiben & lesen), die
// verwendbaren Modi können in jeder C++-Referenz gefunden werden
// (siehe "ios_base")
file_stream.open("MyFile.txt", ios_base::out | ios_base::in);

...

// file_stream kann hier wie jeder andere C++-Stream
// (z.b. std::cout, std::cin, std::cerr) verwendet
// werden

...

// Am Ende muss die Datei geschlossen werden
file_stream.close();
```

BTW, die Fehler in deinem Programm sind:
- Du musst test als Zeiger auf char deklarieren (z.b. char test[100])
- Anstatt "strlen(test)+1" musst du sizeof(test) (-> 100) verwenden
(korrekter wäre aber sizeof(test)/sizeof(test[0]), falls du aber nicht vor hast mit WideCharacter-Strings zu arbeiten macht es keinen Unterschied)
- if(test == ' '): Ich weiß nicht genau welchen Zweck diese Überprüfung erfüllen soll, wenn du das erste Zeichen des Strings überprüfen willst muss es jedenfalls lauten: if(test[0] != ' ')
- Anstatt C/C++ zu mixen würd ich dir empfehlen nur eines zu verwenden, wobei dann bei C++ z.b. std::string die char-Arrays f. Strings ablöst & fstream fopen()/fwrite()/fread()/fprintf()/fscanf()/fclose() etc. ablöst.


----------

