Frage [C++],[Linux] : Werte in einer Datei abspeichern

03/07/2009 16:45 NBA#1
Hi,

spiel grad ein bisschen mit cpp rum. Hab mir ein kleines Programm erstellt, in dem man eingeben kann wie lange man arbeitet/spielt/was auch immer. Und ja ich habe gesucht, aber nur für windows gefunden...

Ich mach das mit dem g++ compiler unter ubuntu, als editor gedit.


Hier mal der Code:

Code:
#include <iostream>
using namespace std;
int main()
{
    int von, bis;
    cout << "Von eingeben : " << endl;
    cin >> von;
	if(von>24 or von <-1)
		{
		cerr << "Fatal Error: Ein Tag kann nur 24 Stunden beinhalten!\nProgramm beendet sich jetzt!" << endl;
		return 1;
		}
    cout << "Bis eingeben : " << endl;
    cin >> bis;
   	 if(bis>24 or bis<-1)
		{
		cerr << "Fatal Error: Ein Tag kann nur 24 Stunden beinhalten!\nProgramm beendet sich jetzt!" << endl;
		return 2;
		}
    cout << "Sie haben von " << von << " bis " << bis << " gearbeitet." << endl;
    return 0;
}
Soweit sogut. Es macht erstmal alles was es machen soll. Mir sagen von wann bis wann ich gearbeitet hab. Nun soll es diese werte in eine Datei schreiben. Leider fehlt mir dazu jeder Ansatz.

Hat da wer von den Ahnungsvollen ne Idee?

Mfg,
NBA
03/07/2009 16:49 schlurmann#2
Code:
#include <fstream>

using namespace std;

int main()
{
    ofstream datei("C:\\bla.txt");
    datei<<"reinschreib0rn"<<endl;
    datei.close();
    return 0;
}
03/07/2009 16:57 djpromo#3
ganz simpel gehalten :


zum schreiben :

Code:
ofstream schreiben ("zeiten.data", ios::binary);

schreiben.write((char*) &von , sizeof(von));
schreiben.write((char*) &bis , sizeof(bis));

schreiben.close();

zum lesen :

Code:
    ifstream lesen;
    lesen.open("zeiten.data",ios::in);
    
  

    lesen.read((char*)&von , sizeof(int));
    lesen.read((char*)&bis , sizeof(int));


    lesen.close();

zeiten.data ist dein dateiname den kannst du selber festlegen.

Das hinter ios:: ist der modus in dem die datei geöffnet wird , da gibt es verschiedene z.b zum anhängenden schreiben usw.

mit ofstream legst du ein objekt an , name natürlich auch frei wählbar

open ist eine funktion deines ofstream(schreiben) objekts , read eine funktion deines ifstream(lesen) objekts.

beim lesen und schreiben musst du immer sagen wieviel geschreiben wird , das ist der 2. parameter und wird einfach mit der funktion sizeof() errechnet.

wenn du mehrere werte auslesen willst musst du das ganze in eine schleife packen die solange liest bis das dateiende erreicht ist :

while(!lesen.eof())
{



}
03/07/2009 17:05 NBA#4
Danke, hab jetzt mal das von schlurmann ausprobiert. Werd jetzt dann das von djpromo testen. Bei dem von schlurmann habe ich jedoch das problem, das bereits vorhandene Werte überschrieben werden.
03/07/2009 17:06 djpromo#5
Quote:
Originally Posted by schlurmann View Post
Code:
#include <fstream>

using namespace std;

int main()
{
    ofstream datei("C:\\bla.txt");
    datei<<"reinschreib0rn"<<endl;
    datei.close();
    return 0;
}

So würde das auch gehen aber soweit ich weiss erzeugt das nur reine Textdateien die dann offen lesbar sind.
03/07/2009 17:07 djpromo#6
Quote:
Originally Posted by NBA View Post
Danke, hab jetzt mal das von schlurmann ausprobiert. Werd jetzt dann das von djpromo testen. Bei dem von schlurmann habe ich jedoch das problem, das bereits vorhandene Werte überschrieben werden.
versuch dann direkt mal mit ios::app als modus beim schreiben(append = anhängen)
03/07/2009 18:50 NBA#7
So gehts danke :)

Hier mal der Code, falls wer daran interesse zeigt:

Code:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    int von, bis, Tag, Monat, Jahr;
    cout << "Von eingeben : " << endl;
    cin >> von;
	if(von>24 or von <-1)
		{
		cerr << "Fatal Error: Ein Tag kannn nur 24 Stunden beinhalten!\nProgramm beendet sich jetzt!" << endl;
		return 1;
		}
    cout << "Bis eingeben : " << endl;
    cin >> bis;
   	 if(bis>24 or bis<-1)
		{
		cerr << "Fatal Error: Ein Tag kann nur 24 Stunden beinhalten!\nProgramm beendet sich jetzt!" << endl;
		return 2;
		}
    cout << "Tag eingeben: " << endl;
    cin >> Tag;
	if(Tag>31)
		{
			cerr << "Fatal Error: Ein Monat kann nur 31 Tage beinhalten!\nProgramm beendet sich jetzt" << endl;
		return 3;
		}
    cout << "Monat eingeben: " << endl;
    cin >> Monat;
	if(Monat>12)
		{
			cerr << "Fatal Error: Ein Jahr kann nur 12 Monate beinhalten!\nProgramm beendet sich jetzt" << endl;
		return 4;
		}
    cout << "Jahr eingeben :" << endl;
    cin >> Jahr;
    cout << "Sie haben am " << Tag<<"."<<Monat<<"."<<Jahr << " von " << von  << " bis " << bis << " Uhr "<<" Aufgepasst"<<"." << endl;
 
 	ofstream Datei("Aufpassen.txt", ios::app);
	Datei<<"Aufgepasst"<<" am: " << Tag<<"."<<Monat<<"."<<Jahr<< " von " << von <<":00" << " bis " << bis <<":00 "<< "Uhr." << endl;
	Datei.close();
return 0;
}