Schreiben und Lesen von Datensätzen zu .dat-Datei C++
Ich bin ziemlich neu in C++ und versuche zu arbeiten, wie schreiben eines Datensatzes in das format dieser Struktur unter, um eine text-Datei:
struct user {
int id;
char username [20];
char password [20];
char name [20];
char email [30];
int telephone;
char address [70];
int level;
};
So weit, dass ich in der Lage bin, zu schreiben, um es gut, aber ohne eine Inkrementierte id-Nummer, die ich nicht wissen, wie zu erarbeiten, die Anzahl der Datensätze, sodass die Datei wie folgt aussieht, nachdem ich geschrieben habe, die Daten in die Datei.
1 Nick pass Nick email tele address 1
1 user pass name email tele address 1
1 test test test test test test 1
1 user pass Nick email tele addy 1
1 nbao pass Nick email tele 207 1
Verwenden Sie den folgenden code:
ofstream outFile;
outFile.open("users.dat", ios::app);
//User input of data here
outFile << "\n" << 1 << " " << username << " " << password << " " << name << " "
<< email << " " << telephone << " " << address << " " << 1;
cout << "\nUser added successfully\n\n";
outFile.close();
So, wie kann ich die erhöhen Sie den Wert für jeden Datensatz auf einfügen und wie dann das Ziel einen bestimmten Datensatz in der Datei?
EDIT: ich habe soweit in der Lage, die Anzeige jeder Zeile:
if (inFile.is_open())
{
while(!inFile.eof())
{
cout<<endl;
getline(inFile,line);
cout<<line<<endl;
}
inFile.close();
}
hat deine Datei muss Klartext sein? Wird Ihr format ermöglichen die Entfernung von Gegenständen?
verwenden
Verwendung von C-Stil
Nach kann ich einen Datensatz auswählen, ich werde dann implementieren, die Fähigkeit zum Bearbeiten und löschen eines Datensatzes.
Die Dinge beginnen zu brechen, wenn Sie username/password/name/E-Mail/Adresse enthalten, die ein Leerzeichen.
verwenden
std::string
statt C-Stil char*
Streicher und weglassen der <<" "
beim Lesen (es wird Essen automatisch ein Leerzeichen).Verwendung von C-Stil
char *
auch automatisch isst weißen Raum. Außerdem <<
ist zum schreiben, nicht Lesen.Nach kann ich einen Datensatz auswählen, ich werde dann implementieren, die Fähigkeit zum Bearbeiten und löschen eines Datensatzes.
Die Dinge beginnen zu brechen, wenn Sie username/password/name/E-Mail/Adresse enthalten, die ein Leerzeichen.
InformationsquelleAutor nbaosullivan | 2012-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie haben, so weit ist es nicht schlecht, außer, dass es nicht Fälle behandelt werden, wo es Raum in Ihrem Zeichenfolgen (zum Beispiel in der Adresse!)
Was Sie versuchen zu tun ist, schreiben Sie eine sehr einfache Datenbank. Sie benötigen drei Operationen, die müssen umgesetzt werden getrennt (obwohl verweben Sie kann Ihnen eine bessere Leistung in bestimmten Fällen, aber ich bin mir sicher, dass das nicht Ihr Anliegen hier).
" "
zu"\n"
. Auf diese Weise, jedes Feld der Struktur wird in einer neuen Zeile und das problem mit den Leerzeichen gelöst werden. Später, wenn Sie Lesen, müssen Sie Lesen Zeile für ZeileHier ist ein pseudo-code:
Randbemerkung: Es ist eine gute Idee, die
\n
nachdem die Daten geschrieben wurden (so dass Sie Ihre text-Datei würde Ende in einer neuen Zeile)+1 Weil du das Konzept der Einführung einer
User
Klasse. ABER beschönigt zu viele Probleme. Auch Pausen, wenn eine beliebige Zeichenfolge kürzer ist als seine max (was so ziemlich immer). Es wird wahrscheinlich brechen, wenn Sie zu viele Räume und erstreckt sich nicht auf Fehler-handling gut genug.Ich beschönigt diese Probleme bewusst. Zunächst, ich bin nicht zu schreiben, das ganze Programm hier nur die grundlegende Idee. Zweitens, die OP ist wirklich neu in C++, ich glaube die übersichtlichkeit des Algorithmus mit Haufen Fehler überprüfen würde nur verwirren ihn. Schließlich, dieser Art des Schreibens eine Datenbank saugt trotzdem und es ist nur gut für eine einfache übung Programm.
InformationsquelleAutor Shahbaz
Über die typischen Methoden zumindest müssen Sie beheben Größe der Datensätze aus, wenn Sie möchten, haben wahlfreien Zugriff, wenn die Datei gelesen wird, so sagen wir, du hast 5 Zeichen für den Namen gespeichert, wie
oder was auch immer Sie verwenden, um die pad, so können Sie den index mit der Nummer der Aufzeichnung * Aufzeichnung Größe.
Erhöht den index, den Sie in der Weise, die Sie tun, werden Sie brauchen, um das Lesen der Datei zu finden, die hohen vorhandenen index und das Inkrement. Oder Sie laden die Datei in den Speicher und hängen Sie den neuen Datensatz und schreibt die Datei zurück
InformationsquelleAutor 111111
Ich schlage vor, wickeln Sie die Datei-handler in eine Klasse, und dann überladen Sie den operator
>> and <<
für Ihre struct, mit diesem war Sie Steuern die in-und out.Zum Beispiel
User
geben. Aber es gibt keine Notwendigkeit für dieMyDataFile
(in der Tat halte ich dies schlimm, wie du kann nicht LesenUser
aus einem std::stringstream (oder anderer stream)). Schreiben Sie eine freie Funktion zu Lesen, dass ein user aus einem stream:std::istream& operator>>(std::istream& stream, User& data) { /* stuff */}
undstd::ostream& operator<<(std::ostream& stream, User const& data) { /*Stuff*/}
InformationsquelleAutor Agus
Ein .Dat-Datei ist normalerweise eine einfache text-Datei selbst geöffnet werden können mit dem notepad . So können Sie einfach Lesen Sie die Letzte Zeile der Datei , Lesen Sie es , entpacken Sie die ersten Zeichen , wandeln es in integer . Dann erhöhen Sie den Wert und durchgeführt werden .
Einige Beispiel-code hier :
InformationsquelleAutor CyprUS
Vorausgesetzt, Ihr Datei-format nicht brauchen, um Menschen lesbar ist.
Schreiben Sie die Struktur aus, um die Datei als solche.
Upps. Sorry 🙂
InformationsquelleAutor Nico
Den code, schreibt die Datei ist eine member-Funktion der user-struct?
Sonst sehe ich keine Verbindung zwischen dem Ausgang und der Struktur.
Möglich Dinge zu tun:
InformationsquelleAutor Marius