zahl in datei speichern und wieder auslesen

juhu, hab endlich die lösung.
zum schreiben der datei:
Code:
#include <fstream.h>

void __fastcall TForm1::Button1Click(TObject *Sender) //Button zum schreiben
{
  ofstream file("bla.bla");
  file << "1234\n";
  file << "1111\n";
}
und zum lesen:
Code:
#include <fstream.h>

void __fastcall TForm1::Button2Click(TObject *Sender) //Button zum einlesen
{
ifstream file("bla.bla");
char buf[10];

int i;
file.getline(buf,10);
Edit7->Text=IntToStr(i=atoi(buf));

int x;
file.getline(buf,10);
Edit8->Text=IntToStr(x=atoi(buf));
}

danke für eure Hilfe!
 
Zuletzt bearbeitet:
Das geht sicher viel schöner. Deine Lösung mit atoi und IntToStr usw ist nicht besonders elegant, ausserdem entzieht sich mir ihr Sinn. (Du liest in ein char-buffer ein, konvertierst das in int, den du in (in im Folgenden unbenutzen) Variablen speicherst und wandelst das Ergebnis wieder in einen String um).

Sag doch einfach mal, welchen Datentyp hat

Edit8->Text

class AnsiString[ ...}; ?
wenn ja: les doch einfach in den Buffer ein und mach dann Edit8->Text=buf; so ne Klasse hat normalerweise Zuweisungoperatoren für Zeiger auf Strings.

oder ist das nur ein Ausdruck des Compilers?
 
Zuletzt bearbeitet:
Das geht sicher viel schöner. Deine Lösung mit atoi und IntToStr usw ist nicht besonders elegant, ausserdem entzieht sich mir ihr Sinn.
ich bin mir auch ziemlich sicher, das das viel schöner geht. aber die frage ist: wie? wie ich schon geschrieben hab, bin ich da für vorschäge immer offen.

und ja, Edit1->Text is ein AnsiString. das problem meiner seits ist es, der AnsiString in char umzuwnadel und andersherum.


(Du liest in ein char-buffer ein, konvertierst das in int, den du in (in im Folgenden unbenutzen) Variablen speicherst und wandelst das Ergebnis wieder in einen String um).
ich wandele den buffer in Int um und weise ihm eine variable zu, weil ich mit den werten ja später noch rechnen will (ist im beispiel noch nicht eingebaut). das das im obigen beispiel überflüssig ist, ist mir hinterher auch aufgefallen :)

so ne Klasse hat normalerweise Zuweisungoperatoren für Zeiger auf Strings.
das versteh ich nciht... ich bin wohl oder übel auch noch ein blutiger anfänger! mit klassen, zeigern, zuweisungsoperatoren und solchen fachbegriffen hab ich's noch nicht so:)


also, ich fände es gut, wenn jemand mal ein konkretes beispiel schreiben würde.
z.b. einen quelltext in dem ein AnsiString und eine Integer Zahl in eine datei gespeichert werden (wie auch immer)
und danach wieder von dort ausgelesen werden und ich zum schluss wieder einen AnsiString und eine Integer Zahl habe

ich wäre dem jenigen echt sehr verbunden!:)

edit: rechtschreibfehler ;-)
 
Zuletzt bearbeitet:
Ich kenn den Typ AnsiString nicht.
Nimm doch was normales, damit sollte das kein Problem sein.
std:string aus <string.h>
oder einfachen char-buffer.

ich wandele den buffer in Int um und weise ihm eine variable zu, weil ich mit den werten ja später noch rechnen will (ist im beispiel noch nicht eingebaut). das das im obigen beispiel überflüssig ist, ist mir hinterher auch aufgefallen
Oki :) , sah nur ohne das zu wissen ziemlich sinnfrei aus.


Und dann habe ich noch eine ziemlich grundlegende Frage zu deinem Problem:
warum ist Edit1->Text vom Typ AnsiString, also einer Klasse, die extra dafür geschaffen wurde, nur Strings zu bearbeiten, wenn du doch weisst, dass sie einen Integer enthält?
 
aso...du kennst das garnicht... hmm...
also mir fällt auch gerade auf, das das forum ja nochmal unterteilt ist, ich glaube ich hätte das problem besser in "Borland CBuilder und VCL" posten sollen, denn ich benutze den Borland c++ Builder...aber is ja jetzt auch egal...

das ist warscheinlich auch der grund, warum du TEdit nicht kennst! Der c++ Builder mit dem ich programmiere hat eine visuelle programmier umgebung(oder wie auch immer man das nennen mag).

warum ist Edit1->Text vom Typ AnsiString, also einer Klasse, die extra dafür geschaffen wurde, nur Strings zu bearbeiten, wenn du doch weisst, dass sie einen Integer enthält?

TEdit ist ein klasse(korrigiere mich, wenn ich mich irre), die ein eingabefeld darstellt, in dem ich alle möglichen zeichen eingeben kann die ich mit Edit->Text als AnsiString auslesen kann. wenn ich da jetzt eine zahl eingebe und damit rechnen will muss ich sie vorher mit der funktion "int x=StrToInt(<meinAnsiString>);" in eine Integer Variable umwandeln.
 
Die Lösung des Problems:

also, ich hab je eine möglichkeit gefunden, AnsiStrings zeilenweise ein eine datei zu schreiben.

Code:
String array[35]; // in diesem String-Array leg ich meine Strings ab...
array[0]="hallo...";
array[1]="Wie geht's?";
.
.
.
ofstream file("test.FIL"); 
 for(int i=0;i<35;i++)
 {
 char *ch = new char[array[i].Length()+1];
 strcpy(ch, array[i].c_str()); //der AnsiString wird in char umgewandelt...

  file << ch << "\n"; // der Ansistring wird als char in eine Zeile der Datei "test.FIL" geschrieben

 delete [] ch;
 }
und dann wieder aus zu lesen:
Code:
String array2[35];

ifstream file("test.FIL");
char buf[100];
int iLength=0;

for (int i=0;i<35;i++)
{
 file.seekg(iLength);
 file.getline(buf,100);
 array2[i]=buf;
 iLength=iLength+array2[i].Length()+2;
}
wie man die eingelesen daten jetzt wieder aus dem array raus bekommt, brauch ich wohl nicht zu beschreiben, oder?

naja... soviel zu diesem thema. wollt das nur nochmal für die nachwelt festhalten. vieleicht hat ja jemand mal das selbe problem wie ich ;)

danke für die denkanstöße und die tipps

mfg Dennis
 
Zurück