Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » LAden und speichern

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 < [ 2 ] [ 3 ]
000
01.11.2008, 22:53 Uhr
~peter123
Gast


Hallo,

Wie schreibe ich mein Programm um, dass ich statt nur Zahlen auch Texte speichern kann.
Dies ist mein Quellcode zum speichern von Zahlen, doch wie speicher ich auch Texte?
AnsiString muss ich da verwenden oder ? aber wie?
Danke schonmal.


C++:
void __fastcall TfrmMain::btnSchreibenClick(TObject *Sender)
{
if(fileexists){
Reset();
}
fseek(meineDatei,0,SEEK_SET);
int zahl=StrToInt(edtDaten->Text);
fwrite(&zahl,sizeof(zahl),1,meineDatei);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.11.2008, 00:04 Uhr
Hans
Library Walker
(Operator)


Hi,

wenn mich nicht alles täuscht, müsste es ungefähr so funktionieren:

C++:
// int zahl=StrToInt(edtDaten->Text);  // Kann weg bleiben
fwrite(edtDaten->Text,sizeof(edtDaten->Text),1,meineDatei);



Die auskommentierte Zeile wandelt ja Zahlenstrings, also Zahlen, die als Text vorliegen ins Binärformat um, was ja nicht mehr nötig ist, wenn sie als Text gespeichert werden sollen.
Übrigens sieht das ganze nach einem C++ Builder Programm aus, gehört demnach also in die "Borland-Abteilung".

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.11.2008, 13:18 Uhr
~peter123
Gast


hiho Hans,

ich habe es mal ausprobiert, so wie du es geschrieben hast, doch geht es gar nicht
Folgende Fehlermeldungen kommen::


[C++ Fehler] Ueb1_Unit1.cpp(43): E2285 Keine Übereinstimmung für 'fwrite(AnsiString,unsigned int,int,FILE *)' gefunden
[C++ Fehler] Ueb1_Unit1.cpp(43): E2268 Aufruf der undefinierten Funktion 'fwrite'
[C++ Warnung] Ueb1_Unit1.cpp(54): W8012 Vergleich von signed- und unsigned-Werten


Was habe ich falsch gemacht?

das ist mein code:


C++:
void __fastcall TfrmMain::btnSchreibenClick(TObject *Sender)
{
if(fileexists){
Reset();
}
fseek(meineDatei,0,SEEK_SET);
fwrite(edtDaten->Text,sizeof(edtDaten->Text),1,meineDatei);
fwrite(&zahl,sizeof(zahl),1,meineDatei);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.11.2008, 13:26 Uhr
~peter123
Gast


hallo nochma,

oder kann ich es mit fwrite(str.c_str(),8,1,meineDatei); schreiben??

Das müsste auch gehen aber wie?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.11.2008, 15:55 Uhr
Lensflare



AnsiString hat eine Methode namens c_str(). Diese gibt den String als char Array zurück.

C++:
const char *s = edtDaten->Text.c_str();
fwrite(s,sizeof(char),strlen(s),meineDatei);


--
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)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.11.2008, 16:17 Uhr
Hans
Library Walker
(Operator)


Hi,

@Lensflare: Das ist VCL-spezifisch, oder? - Damit kenn ich mich nicht aus.

@peter123: Hab mal ein bischen experimentiert, dabei ist das folgende Programm heraus gekommen:

C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{

  struct EdtDaten
  {
      char Text[10];
  } *edtDaten, eD;

  FILE *meineDatei;
  int zahl;

  edtDaten = &eD;
  strcpy (eD.Text, "1234");
  
  if ((meineDatei=fopen("datei.txt", "wb")) == NULL)
   { printf ("Fehler beim öffnen der Datei.\n");
     exit(1);
   }  
  fseek(meineDatei,0,SEEK_SET);
  printf ("Text: %s\n", eD.Text);
  zahl=atoi(edtDaten->Text);
  printf ("Zahl: %d\n", zahl);
  printf ("edtDaten->Text: %s\n", edtDaten->Text);
  fwrite(edtDaten,sizeof(edtDaten->Text),1,meineDatei);
    
  fclose (meineDatei);
  return 0;
}


Das ist ein CharakterMode Programm in C (nicht C++), das in einer "Eingabeaufforderung", d.h. Kommandozeile läuft. Wenn Du damit nix anfangen kannst, oder nicht weist, wie Du es übersetzen musst, dann vergiss es einfach. Der vollständigkeit halber noch die Ausgabe:

Code:
Text: 1234
Zahl: 1234
edtDaten->Text: 1234

In der Datei findet sich folgender Inhalt:

Code:
00000000  31 32 33 34 00 3E 40 00 20 21                    1234.>@. !

Dabei ist alles was hinter dem Nullbyte steht zufälliger Inhalt.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 02.11.2008 um 16:18 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.11.2008, 17:32 Uhr
~peter123
Gast


hallo,

@ Lensflare

Das schreiben bekomme ich jetzt hin *freu* Vielen Dank!!!

Nun möchte ich es noch hinbekommen, dass er die Texte ausgibt.
Aber er gibt nur Zahlen aus.
Was muss ich hier noch ändern?

muss ich es genau so machen wie bei fwrite nur mit fread???



Lese Button:

C++:
void __fastcall TfrmMain::btnLesenClick(TObject *Sender)
{
Reset();
Memo1->Clear();
struct stat Status;
stat("ueb1.dat", &Status);
int FSize=Status.st_size;
for(int i=0;i<FSize/sizeof(zahl);i++){
fread(&zahl,sizeof(zahl),1,meineDatei);
if(zahl!=0){
Memo1->Lines->Add(zahl);
timer++;
}
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.11.2008, 18:50 Uhr
Lensflare



@Hans:
Keine Ahnung , ich habe nach AnsiString gegoogelt und das hier gefunden
http://thunder.prohosting.com/~cbdn/pg_013.htm
Und weil du den C++ Builder erwähnt hast, dache ich auch gleich dass es das richtige sein muss.

@~peter123:
So kannst du Texte aus der Datei lesen und diese in AnsiString speichern

C++:
char *cBuffer;
fread(cBuffer,sizeof(char),100,meineDatei); //100 = Anzahl der zu lesenden Zeichen
AnsiString *as = new AnsiString(cBuffer);



EDIT:
Das Problem ist natürlich dass du nicht weisst wie lang der String in der Datei ist, den du lesen willst. Deswegen vor dem string vielleicht noch die Länge als int reinspeichern.

Oder gleich das AnsiString objekt speichern.
Ich kenne mich leider in C++ nicht mit Serialisierung aus und kann dir nicht sagen ob das mit dem Abspeichern des Objektes ohne weiteres so einfach funktionieren wird.
--
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 02.11.2008 um 19:05 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.11.2008, 19:48 Uhr
~peter123
Gast


hiho

@Lensflare

habe


C++:
char *cBuffer;
fread(cBuffer,sizeof(char),100,meineDatei); //100 = Anzahl der zu lesenden Zeichen
AnsiString *as = new AnsiString(cBuffer);



geschrieben, aber es geht nicht

Was ist denn der Fehler?

Kannst du vllt mir nochmal helfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.11.2008, 19:58 Uhr
~peter123
Gast


Speichern Sie in einem Datensatz
- eine ganze Zahl,
- eine Kommazahl (float)
- einen Text mit höchstens 8 Zeichen
ab.
a) Speichern Sie einen Datensatz durch dreimaligen Aufruf von fwrite:
fwrite(str.c_str(),8,1,meineDatei);
fwrite(&ganzZahl,sizeof(ganzZahl),1,meineDatei);
fwrite(&kommaZahl,sizeof(kommaZahl),1,meineDatei);


Ich denke ich schreibe es besser in so, da ich ja alle 3 arten speichern will^^.

Also mein momentaner Speicher code ist :


C++:
void __fastcall TfrmMain::btnSchreibenClick(TObject *Sender)
{
if(fileexists){
Reset();
}
fseek(meineDatei,0,SEEK_SET);
const char *s = edtDaten->Text.c_str();
fwrite(s,sizeof(char),strlen(s),meineDatei);
}


was muss ich nun hier noch ändern???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ Borland C++ Builder ]  


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: