Aus Datei Editfelder füllen



  • 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.



  • nunja so geht das schon,

    speichern:

    TStringList *list = new TStringList();
    list->Add(Memo1->Lines->Strings[0]);
    list->Add(Memo1->Lines->Strings[1]);
    list->Add(Memo1->Lines->Strings[2]);
    list->Add(Memo1->Lines->Strings[3]);
    list->Add(Memo1->Lines->Strings[4]);
    .
    .
    .
    
    list->SaveToFile("c:\\test.txt");
    delete list;
    

    laden:

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    Memo1->Lines->Add(list->Strings[46]);
    Memo1->Lines->Add(list->Strings[47]);
    Memo1->Lines->Add(list->Strings[48]);
    Memo1->Lines->Add(list->Strings[49]);
    Memo1->Lines->Add(list->Strings[50]);
    .
    .
    .
    

    nur das jetzt die leeren strings im memofeld stören 😞
    wenn man jetzt noch eine zeile hinzufügen möchte dann macht er eben bei der line 6weiter und 3-5 sind leer 😞

    gibts vielleicht eine möglichkeit ein memofeld zu prüfen und alle nicht befüllten lines->Strings zu löschen?



  • Was spricht denn gegen sowas

    TStringList *list = new TStringList();
    list->Add(IntToStr(Memo1->Lines->Count)); // Anzahl ablegen
    list->AddStrings(Memo1->Lines); // gesamtes Memo ablegen
    
    .
    .
    .
    
    list->SaveToFile("c:\\test.txt");
    delete list;
    

    dann einlesen

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    int count = list->Strings[0].ToInt(); // Anzahl wieder einlesen
    for( int i=0; i<count;++i)
       Memo1->Lines->Add(list->Strings[i+1]);
    


  • hallo noch mal,

    versuche jetzt nach dem laden der datei, die lines im memofeld zu prüfen

    if (Memo1->Lines->Strings[9] == "");
    {
     Memo1->Lines->Delete(-1);
     }
    

    das funktz aber nicht, warum?

    @Braunstein
    ja sieht schon verständlich aus, nur ich habe insgasamt 12memofelder in denen bis zu 5 eiträge(lines) stehen können.

    ich muss ja dan sicher stellen, daß die cout abfrage immer am anfang in der datei steht, die ja dann auch zu dem passenden memofeld genommen wird hmmm....

    ich werd aufjedenfall mal probieren, mal schauen ob ich das hinbekomme THX Braunstein

    BIGTHX



  • wie müsste den der code aussehen um nur eine line im memofeld zu löschen?



  • Hallo

    bitte schau doch wenigstens mal in die BCB-Hilfe. Oder erwartest du wirklich, das wir dir die ganze Hilfe vorlesen?

    Memo1->Lines->Delete(0); // erste Zeile löschen
    

    Jansen verweißt da gerne auf das Texteditor-Beispiel, das jeder Anfänger durcharbeioten soll.

    bis bald
    akari


Anmelden zum Antworten