Daten in einer Externen datei speichern und später wieder Aufrufen!?!



  • Na, klar geht das "untere" auch mit dem C++Builder. Die richtigen Header einbinden und das sollte gehen.

    Aber wenn's schon ok ist....



  • also ich persönlich find das am komfortabelsten:

    void ReadData(void) {
      char cTemp[CHARSIZE+4];
      sprintf(cTemp,"%s.dat",cpName);
      ifstream F(cTemp);
    
        for(int i=0;i<VARIABLES;i++)
          F>>fVar[i];
    }
    //-----------------------------------------------------------------------------
    void WriteData(void) {
      char cTemp[CHARSIZE+4];
      sprintf(cTemp,"%s.dat",cpName);
      ofstream F(cTemp);
    
        for(int i=0;i<VARIABLES;i++)
          F<<fVar[i]<<"\n";
    }
    

    weiß auch nicht aber das ist doch irgendwie kurz und bündig, oder?
    Wobei ich dazu sagen muss dass das ganze ursprünglich aus einer Klasse von mir kommt und dort cpName abgefragt wird um einen Dateinamen zu vergeben und cTemp ist halt nun mal der Text der reinkommt.

    mfg
    Tom 🙂



  • äh??

    TStrings::SaveToFile(FileName);
    TStrings::LoadFromFile(FileName);
    

    Das ist kurz und bündig...

    Außerdem sind wir hier im VCL-Forum. 'Wir' machen einen weiten Bogen um C-Code. 😉

    Grüße Joe_M.



  • Wieder eine neue Frage^^ Ich habe das jetzt so gemacht:

    Name->Lines->SaveToFile("text.dat");
    Geburtsdatum->Lines->SaveToFile("text.dat");
    Wohnort->Lines->SaveToFile("text.dat");
    Beruf->Lines->SaveToFile("text.dat");
    Familienstand->Lines->SaveToFile("text.dat");
    Sonstiges->Lines->SaveToFile("text.dat");
    

    Aber jetzt wird immer nur das letzte in der datei text.dat gespeichert. In dieses Fall Sonstiges.

    Wie kann ich es amchen, dass alles in einer jeweils neuen Zeile gespeichert wird???



  • Hallo

    bei SaveToFile wird immer eine neue Datei angelegt.
    Wenn du mehrere Sachen auf einmal speichern willst, must du die einzelnen Werte mit TStringList::Add() in eine Liste zusammenfügen, bevor du diese einmal speicherst.

    Wenn ich mir deinen Code so anschaue, komme ich auf den unguten Gedanken, das du irgendwo ne Reihe von TMemos zum Speichern benutzt...
    Mach mal lieber so was

    TStringList *SaveList = new TStringList();
    SaveList->Add(EditName->Text);
    SaveList->Add(EditDatum->Text);
    ...
    SaveList->Add(EditSonstiges->Text);
    SaveList->SaveToFile("text.dat");
    delete SaveList;
    

    bis bald
    akari



  • Super klappt echt toll!
    Nur wie hole ich diese Daten wieder seperat Zeile für zeile in die Memos zurück, wenn ich das mit LoadFromFile() mache???



  • Hallo

    Hast du dir denn überhaupt mal die BCB-Hilfe zum Thema TStringList angeschaut? Dort steht unter Eigenschaften und Methoden alles, was du wissen must. Der Aufbau ist im Grunde so ähnlich wie das Speichern.

    bis bald
    akari



  • Ich habe jetzt schon so lange an der Stelle gesucht die du mir geraten hast, aber ich finde dort einfach nichts passendes.
    Und wenn ich etwas finde was passen könnte, ist es so schlecht erklärt, dass ich es nicht verstehe ^^.
    Könnt ihr mir noch einmal helfen??? Its auch das letzte mal!

    Danke schonmal!



  • naja, laden geht doch auch ganz einfach:

    TStringList *LoadList = new TStringList();
        LoadList->LoadFromFile("text.dat");
        EditName->Text = LoadList->Strings[0];
        EditDatum->Text = LoadList->Strings[1];
        // ...
        EditSonstiges->Text = LoadList->Strings[2];
        delete LoadList;
    


  • @Acidmrp: Das führt aber doch zu fürchterlichem Wurstcode, den man für jedes Edit neu anpassen muß...

    @Hallo!:
    Tja, siehst Du, wenn Du direkt etwas genauer gefragt hättest, hätten wir uns die ganzen 1 1/2 Seiten bis hierher sparen können. Seufzer.

    In diesen Fall würde ich eine etwas andere Vorgehensweise vorschlagen. Alleine schon um die Tipparbeit in Grenzen zu halten.

    Nimm TEdits statt TMemos!

    Im Destruktor der Form eine dynamische TStringList erstellen. Durch alle Edit-Felder der Form iterieren. Für jedes TEdit schreibst Du eine Zeile in die StringList, die so aussehen muß: NameDesEditFeldes=TextAusDemEditfeld. z.B.: TEditName=Hallo. Stringliste mit SaveToFile speichern. Stringliste löschen.

    Im Konstruktor der Form prüfen, ob die Datendatei existiert. Wenn ja, dynamisch eine TStringList erstellen und die Datei dort einlesen. Wiederum durch alle Editfelder iterieren und über die Eigenschaft Names der Stringliste den Text wieder einlesen und dem Editfeld zuweisen. Stringliste löschen nicht vergessen.

    Falls dir die Umsetzung Schwierigkeiten bereitet, würde ich empfehlen, zuerst ein paar Grundlagen zu lernen.
    Arbeite dich ein bißchen ein und frag nochmal, wenn Du spezifische Probleme bekommst. Allerdings werde ich nur bereits von dir gezeigten Code korrigieren. Ich werde dir das hier auf gar keinen Fall hinschreiben.


Anmelden zum Antworten