Aus Datei Editfelder füllen



  • mit SaveToFile() speicherst du die Daten in die Datei.
    wie wird dan wohl die Funktion heissen die die Daten einliesst?
    sonst würde ich dir die BCB-Hilfe enpfehlen



  • ja würde ich so gesehen sagen LoadFromFile 😉 ??

    könntet ihr mir mit nem kleinem Ansatzcode Beispiel aushelfen bitte, dann ist’s einfacher mit dem verstehen, den die Hilfe teilweise umzusetzen ist net immer einfach für ein Anfänger 😞



  • Unabhängig von Funktionsnamen für das Einlesen...

    ist die Art der Speicherung wenig sinnvoll. Drei Werte werden hintereinander gehangen um sie dan in eine Datei zu speichern. StringList hat die Möglichkeit die Werte mit einem Zeilenumbruch getrennt zu speichern. Dann bekommt man die Werte auch beim Einlesen einzeln wieder zurück. So musst du hier einen Strin lesen und diesen dann manuell am Leerzeichen aufteilen. Ungünstiges vorgehen

    TStringList *list = new TStringList();
    list->Add(Edit1->Text);
    list->Add(Edit2->Text);
    list->Add(Edit3->Text);
    list->SaveToFile("c:\\test.txt");
    delete list;

    einlesen:
    TStringList *list = new TStringList();
    list->.............("c:\\test.txt");

    Edit1->Text=list->Strings[0];
    Edit2->Text=list->Strings[1];
    Edit3->Text=list->Strings[2];
    delete list;



  • hawkdz schrieb:

    ja würde ich so gesehen sagen LoadFromFile 😉 ??

    na dan würde ich mal inder Hilfe nachschauen ob TStringList eine Funktion LoadFromFile hat (TStringList im BCB markieren und F1 drücken)

    ich würde deine Speicherunktion etwas ändern:

    list->Add(Edit1->Text +" "+Edit2->Text+"  "+ Edit3->Text);
    

    würde ich abändern in:

    list->Add(Edit1->Text);
    list->Add(Edit2->Text);
    list->Add(Edit3->Text);
    

    so hast du den Text jedes Edits in einer eigenen Zeile, in der Datei.

    so weisst du nachher beim Laden auch, welcher Text in welches edit rein muss



  • wie sich so alles überscheidet 🙂



  • Christian211 schrieb:

    wie sich so alles überscheidet 🙂

    Code-Tags :p



  • super es geht!! 🙂

    ich habe mir schon sorgen gemacht, bei speichern der Datei wenn ich das ohne Leerzeichen mache, daß er das als ganzes sieht.

    speichern:

    TStringList *list = new TStringList();
    list->Add(Edit1->Text);
    list->Add(Edit2->Text);
    list->Add(Edit3->Text);
    list->SaveToFile("c:\\test.txt");
    delete list;
    

    laden:

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");    //:)
    Edit4->Text=list->Strings[0];
    Edit5->Text=list->Strings[1];
    Edit6->Text=list->Strings[2];
    delete list;
    

    BIG THX an euch und wünsche noch ein schönen Tag!



  • Hallo

    allerdings solltest du beim Laden sicherstellen, das in der StringListe dann auch wirklich mindestens 3 zeilen sind, sonst gibt es eine Zugriffsverletzung.

    bis bald
    akari



  • sorry für das generve!

    aber habe jetzt ein kleines Problem 😞

    ich hab das Speichern mal mit einer ComboBox1->ItemIndex ausprobiert das klappt.

    aber wen ich das jetzt so schreibe,

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    Form2->ComboBox1->ItemIndex=list->Strings[0];
    delete list;
    

    bringt er den typischen fehler

    [C++ Fehler] Unit2.cpp(2830): E2034 Konvertierung von 'AnsiString' nach 'int' nicht möglich
    

    hab mir am anfang nicht gedacht das ich das benutzen kann, da es aber jetzt mit dem speicher des ItemIndex geht, muss ich es nicht erst umsetzen in ein Editfeld 😉

    nur wie kann ich den Int werte in nen string umwandeln, gibts da ne möglichkeit alle die im Button1 vorhandenen Int Variabeln in String umzuwandeln?

    THX



  • siehe in der Hilfe zu
    IntToStr
    StrToInt
    AnsiString::ToInt



  • Hallo

    dein Ansatz ist schon richtig, wie du AnsiString nach umwandelst steht in der BCB-FAQ hier im Forum.

    /Edit : Braunstein , wir scheinen beide wohl immer die Antworten uns gegenseitig wegnehmen wollen 😉

    bis bald
    akari



  • jaja schon gut,

    ich hau mir ja schon auf den hinterkopf 😉

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    ComboBox1->ItemIndex= StrToInt(list->Strings[0]);
    

    aber ich hab na ne menge ComboBoxen und Checkboxen mit State 😉

    CheckBox1->State=StrToInt(list->Strings[1]);
    

    ah zu früh gefreut 😞
    das mit der CheckBox geht doch nicht er bringt mir ein fehler nicht im compiler sondern erst wen ich den button laden drücke irgendwas im debuger aber frag mich mal wie ich das verstehen soll !?!? HILFE 😕



  • hawkdz schrieb:

    aber frag mich mal wie ich das verstehen soll !?!? HILFE 😕

    Indem Du erst einmal die C++-Grundlagen lernst?



  • ja hast du vollkommen recht @ joe_m.

    aber diese Festestellung hilft auch nicht wirklich weiter 😞
    aber danke das du mich so freundlich dran erinnerst!

    naja zum problem ich glaube ich muss ein memofeld auch mit den eizelnen strings aus und eingeben bzw laden.

    kann es sein da er in den zeilen durcheinander kommmt den mit einem einzelnen CheckBox->State kommt er klar?

    danke für die lernhilfe an alle 😉



  • Hallo

    oder indem du die betreffende Fehlermeldung hier mal postest?

    Ich vermute mal das in der ersten zeile der Datei eben keine reine Ganzzahl steht.

    /Edit : Außerdem weiß ich nicht wie du plötzlihc von ComboBox auf CheckBox kommst, und warum du CheckBox->State nimmst und nicht CheckBox->Checked

    bis bald
    akari



  • Ich hab mir das mal noch mal genauer angeschaut,

    es sieht halt so aus, anhand dieses Beispiels:
    speichern:

    TStringList *list = new TStringList();
    list->Add(Memo1->Text);
    list->Add(CheckBox1->State);
    delete list;
    

    laden:

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    Memo1->Text=list->Strings[46];
    CheckBox1->State=StrToInt(list->Strings[3]);
    

    wenn im Memofeld, 2 Zeilen stehen, kann es glaub ich ja so nicht gehen.
    wie akari schon ein paar antworten vorher gesagt hat, daß die Zeilen in der Datei übereinstimmen müssen.

    also denke ich mal das ich das Memofeld auch einzeln in die Datei speichern muss?! Die eizelnen Strings mein ich

    ich habe das Memofeld auf 5lines beschränkt und wenn ich jetzt alle 5 in die Datei schreibe und auch immer alle 5 auslesen lasse, das es egal sein wird ob sie alle befüllt worden sind oder nicht?!



  • Hallo

    ich habe das Memofeld auf 5lines beschränkt

    Aha, und wie? 😕
    und fällt dir dazu im Vergleich hierzu etwas auf?

    Memo1->Text=list->Strings[46];
    

    Wenn das kein Schreibfehler ist, hast du nicht wirklich begriffen was die Klammern machen.

    bis bald
    akari



  • @hawkdz
    Alles was mehr als eine Zeile bringen kann (Memo) solltest du der Einfachheit halber lieber in eine eigene Datei speichern. TMemo::Lines ist ja schon vom Typ TStrings und kann ja so direkt geschrieben und gelesen werden.



  • @akari

    ja das mein ich ja mit dem fehler, daß wen im memofeld 2 zeilen stehen das beim laden der datei, nur die zeile [46] ausgelesen wird.

    aber ich brauche ja auch dann die 47 oder....

    ja das mit einer weiteren datei ist aber nicht erwünscht, den beim laden möchte man ja nicht 20verschiedene dateien anklicken.

    ich mach mir mal die arbeit und versuche es jetzt mit einzelausgabe des memofeldes.

    ich habe es wie gesagt mit einer if abfrage auf 5 beschränktes können nur maximal 5 lines drinstehen, wenn ich jetzt nur 2 stehen habe hoffe ich das die anderen 3 nur als eine leere zeile gespeichert werden und beim laden auch nur als eine leere linestring eingefügt werden.

    wie gesagt hoffe daß es so klappt, wen ihr noch ein tipp habt were super!
    denn ch weis das die fragen die ich hier stelle manchen auf den geistgehen!
    aber jeder hat man mal klein angefangen 😉

    BIGTHX



  • Du könntest ja bei jedem memofeld die Zeilenanzahl mit abspeichern. Eine Alternative wäre auch statt TStrings::SaveToFile ein eigenes Format (mit streams oder so) oder TIniFile zu Speichern und Laden zu verwenden.


Anmelden zum Antworten