Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Daten einer Klasse speichern und wieder laden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.08.2005, 17:22 Uhr
~Gast
Gast


Hi Leute,
erstmal danke!!! Hab auf meine Fragen bis jetzt immer flotte und gute Antworten bekommen.
Hier gleich noch eine.
Wie lade ich zuvor gespeicherte Daten wieder in eine Klasse?
Das wären die Daten:

C++:
struct List
{
    char name[80];
    unsigned int number;
};
class TelList
{
    private:
        List Tel[50];    
        int count;
...        




Wie würdet ihr die speichern?

P.S.: Hab Problem beim Einloggen, an wen muss ich mich da wenden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.08.2005, 18:34 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Betreffs einloggen: probier mal "Session" zum Einloggen, bzw musst du Cookies akzeptieren wenn du immer eingeloggt bleiben willst

zum anderen kannst du z.b da sizeof(List) konstant ist (84 bytes) einfach mit fwrite z.b die elemente in eine datei schreiben (in "binärform") und die dann auch wieder so auslesen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.08.2005, 19:51 Uhr
Lensflare



hier ein beispiel:


C++:
struct List
{
    char name[80];
    unsigned int number;
};
class TelList
{
    private:
        FILE *savefile;
        
        List Tel[50];    
        int count;

    public:
      void save_in_file()
      {
        savefile = fopen("C:/savefile.xxx","wb"); //in binärmodus/schreiben öffnen
        
        for(int i=0; i<50; i++)
        {
          fwrite(&Tel[i],sizeof(List),1,savefile); //alle 50 Tel-Einträge in die datei schreiben
        }
        fwrite(&count,sizeof(int),1,savefile); //und am schluss noch count speichern
        
        fclose(savefile);
      };

      void load_from_file()
      {
        savefile = fopen("C:/savefile.xxx","rb"); //in binärmodus/lesen öffnen
        
        for(int i=0; i<50; i++)
        {
          fread(&Tel[i],sizeof(List),1,savefile) //alle Tels...
        }
        fread(&count,sizeof(int),1,savefile) //...und count aus der datei in die
                                                        //jeweiligen variablen speichern.
        
        fclose(savefile);
      };


...        



so sollte es gehen. habe es aber nicht getestet.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 24.08.2005 um 19:58 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.08.2005, 00:37 Uhr
typecast
aka loddab
(Operator)


Und man koennte das auch in C++ machen


C++:
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstdlib>

class TelList {
public:
        struct Entry {
                std::string name;
                unsigned int number;
        };

        void add(const TelList::Entry& e) {
                liste.push_back(e);
        }
private:
        std::vector<Entry> liste;

        friend std::ostream& operator<<(std::ostream&, const TelList&);
        friend std::istream& operator>>(std::istream&, TelList&);
};

std::ostream& operator<<(std::ostream& out, const TelList& telefonliste) {
        for (std::vector<TelList::Entry>::const_iterator i = telefonliste.liste.begin();
             i != telefonliste.liste.end(); ++i) {
                out << i->name << std::endl << i->number << std::endl;
        }
        return out;
}

std::istream& operator>>(std::istream& in, TelList& telefonliste) {
        TelList::Entry tmp;
        std::string tmpString;
        while (std::getline(in, tmp.name)) {
                std::getline(in, tmpString);
                tmp.number = atoi(tmpString.c_str()); /* std::stringstream waere hier schoener. aber da ich in dem bleistift code eh keine fehler abfange, soll ein ungeprueftes atoi genuegen :) */
                telefonliste.liste.push_back(tmp);
        }
        return in;
}

int main() {
        TelList list;
        TelList::Entry e;

        e.name = "Type Cast";
        e.number = 190333333;

        list.add(e);

        e.name = "Foo Bar";
        e.number = 27342344;

        list.add(e);

        std::ofstream outfile("test.dat");
        outfile << list;

        outfile.close();
        std::ifstream infile("test.dat");

        TelList neueListe;
        infile >> neueListe;

        std::cout << neueListe;

        return 0;
}



Cooler waere noch dem Enty auch die operatoren operator<< und operator>> zu spendieren. Und diese dann in den operatoren fuer die Liste aufzurufen
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: