Daten in Datei speichern
-
Hi Leute,
ich will gerne Daten in eine date (z. B. *.txt) speichern. Wenns nur das
währe, dann hätte ich kein Problem.
Ich will Variablen in eine Datei speichern.
Diese Daten sollen dann später wieder in das Programm zu laden sein.
Das ganze hat den zweck, das ich ein Telefonbuch programmieren will.
Es sollen als Vor-, Nachname, Adresse etc. gespeichert werden. Dazu kommen
noch einige Texte. Zu bedenken ist das nicht alle Variablen einen Inhalt
aufweisen. Ich will also so etwas wie eine strukturierte Datei anlegen.Ich hoffe das Ihr mir weiter helfen könnt. Danke schon mal.
Schnorchel
-
typedef struct { char Name[20],VName[20];
char PLZ[6];
char Ort[20];
int Alter;
} Teiln_Typ;FILE *TeilnDat;
Teiln_Typ Satz;
.
.
.TeilnDat=fopen("Teiln.dat","r+b") /* Datei öffnen ( oder "w+b") */
.
.
.printf("Neuer Teilnehmer:\n\n");
printf("Name :\n");
printf("Vorname :\n");
printf("Alter :\n");
printf("PLZ :\n");
printf("Wohnort :\n");
gotoxy(13,3);
scanf("%s",SatzBuff.Name);
gotoxy(13,wherey());
scanf("%s",SatzBuff.VName);
gotoxy(13,wherey());
scanf("%d",&SatzBuff.Alter);
gotoxy(13,wherey());
scanf("%s",SatzBuff.PLZ);
gotoxy(13,wherey());
scanf("%s",SatzBuff.Ort);
fseek(TeilnDat,0L,2);
fwrite(&SatzBuff,sizeof(Teiln_Typ),1,TeilnDat);
fflush(TeilnDat);
.
.
.
fclose(TeilnDat);
.
.
.
/*********************
So in etwa gings mal mit QC25 zum Anhaengen von Daten an Datei
*********************/
-
Also erstmal hast du Edit Felder oder ähnliches mit Werten8denke deine Adressen).
So nun würde ich es so machen mit ofstream:
Du wandelst deine AnsiStrings aus den Edit Feldern in char Arrays um.
Die du jetzt per << in die TXT Datei schreibst.Wenn du die jetzt einlesen bzw suchen willst, liest du die Daten alle per bestimmter Struktur ein.
Ich habe das so jetzt des öfteren gemacht und es klappte.
Da ich aber kein C++ Professor bin, denke ich das ander bestimmt bessere Ideen haben.
-
TStringList, TIniFile
-
Struct bauen mit den benötigeten Variablen. Operator char* überladen auf Adresse des ersten Elements. Und dann schön mit fstream->read bzw. write die struktur lesen schreiben.
-
Also die beste Lösung ist die von Jansen vorgeschlagen mit TiniFile,
allerdings gibt es hierbei das Problem das die Größe einer INI-Datei
auf 64 KB begrenzt ist. Für die Speicherung der gewünschten Informationen
ist jedoch eine Datenkapazität > 64 KB notwendig.
Ich hoffe also auf weitere Beiträge, die mir helfen. Komplette Anwendungs-
beispiele währen auch nicht schlecht. Auf eine Datenbank will ich ganz bewußt
verzichten, um die Anwendung möglichtst einfach auf den Client laufen lassen
zu können.Txh Schnorchel
-
TMemIniFile hat m.E. keine derartigen Begrenzungen.
-
Schau mal auf meiner Seite unter Bc++Builder->Dateien/Flesystem->Filestreams lesen. Das scheint genau das zu sein, was Du brauchst.
-
@F98
hab mir das da mal für mein gemacht. Aber da kamen immer komische Zeichen raus..Dann hab ich mal deins komplett unter die Luppe genommen.
Eine Frage die ich dazu habe, und da auch nicht behandelt wird.Es geht um die Zeile:
Datei->Seek(Edit1->Text.ToIntDef(1) * sizeof(data), soFromBeginning);Das Edit ding hat den Wert 3. Woher weiß Datei-Seek, welche 3 du suchst..
Sprich wo/wie findet er die Zahl?
Weil ich habe das Gefühl das bei mir das problem ist, das er die ID net findet oder so.Gruß
-
schau mal hier: http://bcb-tutorial.c-plusplus.net/

-
@DJ BlackEagle
Auf meiner Seite steht: Edit1 beinhaltet die Nummer des zu lesenden Datensatzes
Also wir der 3. Datensatz (data) gelesen. Seek setzt dabei den Zeiger von Beginn an (soFromBeginning) 3x um die Größe (sizeof) von data nach vorne und mit Read werden dann die Daten in das struct "Daten" eingelesen.