Textdatei in ListBox einlesen, spezielles Problem



  • Hi,

    mal ins blaue vermutet:

    int i=ListBox1->ItemIndex; 
    ListBox1->Items->Delete(i); 
    AnsiString lang=li->Strings[ListBox1->ItemIndex]; // siehe unten!
    

    ListBox1->ItemIndex ist -1 weil du vorher das Item mit dem Index gelöscht hast und es somit nicht mehr selektiert ist. Wenn du aber vorher schon den Index im Zwischenspeicher (i) hast, verwende doch einfach das 🙂

    Und ist es wirklich richtig das nach dem Speichern immer ein und derselbe Wert in der Textdatei (kla.txt) steht?

    eingelesene Textdatei:
    wert_1
    wert_2 // den löschen
    wert_3

    Ausgabe in kla.txt:
    wert_2
    wert_2
    wert_2

    mfg, Micha



  • RandomAccess85 schrieb:

    Wenn du aber vorher schon den Index im Zwischenspeicher (i) hast, verwende doch einfach das 🙂

    versteh ich nicht ganz, hab das jetzt so gemacht

    int i=ListBox1->ItemIndex;
    ListBox1->Items->Delete(i);
       AnsiString lang=li->Strings[ListBox1->ItemIndex];
       TStringList *kla = new TStringList();
       for(int i=0;i<ListBox1->Items->Count;i++)
        {
         kla->Add(lang);
        }
        kla->SaveToFile("kla.txt");
        delete kla;
    

    aber er bringt immer noch den gleichen Fehler

    RandomAccess85 schrieb:

    Und ist es wirklich richtig das nach dem Speichern immer ein und derselbe Wert in der Textdatei (kla.txt) steht?

    eingelesene Textdatei:
    wert_1
    wert_2 // den löschen
    wert_3

    Ausgabe in kla.txt:
    wert_2
    wert_2
    wert_2

    eigentlich nicht :D, ich glaub da hab ich bisschen falsch gemacht, das soll eigentlich so aussehen:
    eingelesene Textdatei:
    wert_1
    wert_2 // den löschen
    wert_3

    Ausgabe in kla.txt:
    wert_1
    wert_3

    mfg
    Hideki



  • Geh doch einfach mal mit dem Debugger durch und schau dir an welchen Index du verwenden willst.



  • Hi
    also der Debugger meckert an der Stelle wo ich die neue StringList erstelle aber auch nur dann wenn ich nicht das löschen aus der ListBox auskommentiere, dann funktioniert es relativ fehlerfrei.
    realtiv heist das er keinen Fehler bringt aber nicht das macht was ich will aber daran ist der code nicht schuld 😃

    mfg
    Hideki



  • Hallo,

    int i=ListBox1->ItemIndex;  // ItemIndex >= 0, sofern eins ausgewählt ist
    ListBox1->Items->Delete(i); // ItemIndex = -1
    AnsiString lang=li->Strings[ListBox1->ItemIndex]; // ItemIndex immernoch -1 aber an -1 existiert kein Item ... aber du wirst bald merken das die Zeile  sowieso überflüssig ist ^^
    

    btw. du musst auch keine neue StringList erstellen wenn du schon eine hast in der alle relevanten Werte stehen 🙂 .. schau dir in der Hilfe mal die Methoden und Eigenschaften der TStringList an.

    mfg, Micha!



  • Na endlich habs geschaft^^
    Danke eucht für die Hilfe und die Hinweise, hier ma meine Lösung:

    int i=ListBox1->ItemIndex;
    ListBox1->Items->Delete(i);
       AnsiString lang=li->Strings[i];
        li->Delete(i);
        li->SaveToFile("kla.txt");
    

    bis denne
    Hideki



  • Mir ist immer noch nicht klar, warum du zwei Stringlisten verwendest.
    Das hier geht doch auch.

    int i=ListBox1->ItemIndex;
    if( i > -1 ) //Für den fall, dass nichts selektiert ist
      ListBox1->Items->Delete(i);
    ListBox1->Items->SaveToFile("kla.txt");
    


  • Hi
    1. ich wusste nicht das das

    ListBox1->Items->SaveToFile
    

    exestiert^^
    2. das funktioniert nicht weil ich in die textdatei beide teile schreiben muss, also Name1,Name2 aber in der ListBox wird nur Name1 ausgegeben und somit dann auch nur Name1 gespeichert.
    Aber das

    if( i > -1 ) //Für den fall, dass nichts selektiert ist
    

    kann ich gut gebrauchen 😃

    mfg
    Hideki



  • TListBox::Items ist vom Typ TStrings. Das hatte aber auch RandomAccess85 schon angedeutet.



  • Jo, jetz weis ich es auch^^

    mfg
    Hideki


Anmelden zum Antworten