Datei - Infos in Objekte abspeichern
-
Hallo zusammen,
ich wollte mich mal erkundigen, was ich an Möglichkeiten habe, Daten korrekt einzulesen. Hierzu folgender Code.class Telefonbuch { string vorwahl; int telefonNr; string name; public: void loadEntry(ifstream &); } /* Die Datei enthält sequentiell folgende Struktur: vorwahl;telefnNr;name\n */ void Telefonbuch::loadEntry(ifstream & inFile) { char dummy; getline(inFile, vorwahl, ';'); inFile>>telefonNr; inFile>>dummy; //dummy liest ; ein getline(inFile, name, '\n'); }Meine Fragen dazu sind nun folgende: 1) Wie fange ich in der Datei enthaltene falsche Typen ab (wenn z.B. statt der telefonNr(int) --> k.A. (für Keine Angabe) steht. 2) Gibt es sicherere Methoden, um das Einlesen durchzuführen?
Wäre Euch wirklich dankbar, wenn Ihr mir Rat geben könntet.
-
Schwieriges Thema.
Wenn du nur die Daten abspeichern möchtest, ohne zusätzliche Informationen über Typ der Daten bzw. Aufbau deiner Objekte hast du eigentlich keine Chance Fehler zu korrigieren, man kann sie (wenn man Glück hat) erkennen und dann den Lesevorgang abbrechen.
Ansonsten musst du Zusatzinformationen in der Datei ablegen.
-
weiß nich ob das hilft, aber beim einlesen von ints(!!!) überprüf ich(wenns schnell gehen soll so)
int eingabe; cin>>eingabe; while(cin.good()) { } cerr<<"Fehler";ungetestet, bin nich am Programm!
Aber inwieweit man das jetzt für datein verwenden kann, kann ich aus kopf nich sagen!
-
Deine Klasse/Struktur hat eine feste Grösse. Speichere deine Objekte und mach dir über die Attribute keine Gedanken.
Anders sieht das aus, wenn Dateien ausgewertet werden müssen. Im Prinzip aber auch ganz einfach. Typweise einlesen und abprüfen ob nummerisch oder alphanumerisch (String-Funktionen). Falls was durcheinander kommt das dann ganz schnell raus.
-
Hallo,
speichere die Telefonnummer als String, sonst gehen dir fuehrende Nullen verloren.
mfg
v R
-
Möglichkeite:
1. relationale Datenbank mit Tabellen
2. objektorientierte Datenbank
3. PlainfilesDie 3. ist z.B. mit XML ganz gut zu realisieren, schau dir mal TinyXML an. Oder du serialisierst alles mit boost::serialization.
Ein eigenes Plainformat lohnt sich eigentlich nicht, außer zur Übung.