Textdatei in ListBox einlesen, spezielles Problem
-
Also ich hab den Teil mit den Konsolen-Programmen übersprungen

mfg
Jakel
-
ich mag keine Konsolen Programme
aber das Tutorial finde ich geil, das werde ich auch machen, danke nochmal für die gute Hilfe aber ich hab da noch ne Frage,
ich will einen Eintrag über die ListBox entfernen also der soll dann in der ListBox und in der Textdatei entfernt werden, wie kann ich das machen?
Wenn ich es über ListBox->Items->Delete mache will der nen Integer und selbst dann weis ich nicht wie ich es in der Textdatei entfernen kannmfg
Hideki
-
Hallo
Wenn ich es über ListBox->Items->Delete mache will der nen Integer
Das ist auch vollkommen korrekt. Du solltest intern auch immer nur mit Indexen arbeiten, das beseitigt das Problem der Behandlung von Textdupletten.
und selbst dann weis ich nicht wie ich es in der Textdatei entfernen kann
Du must nach jedem Löschen oder Einfügen natürlich die Textdatei aus den Daten in der ListBox bzw. Speicher neu erstellen.
bis bald
akari
-
Hi hab das jetz so gemacht aber der sagt mir "Der Index der Liste überschreitet das Maximum (-1);
int i=ListBox1->ItemIndex; ListBox1->Items->Delete(i); AnsiString lang=li->Strings[ListBox1->ItemIndex]; TStringList *kla = new TStringList(); for(int a=0;a<ListBox1->Items->Count;a++) { kla->Add(lang); } kla->SaveToFile("kla.txt"); delete kla;mfg
Hideki
-
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_3Ausgabe in kla.txt:
wert_2
wert_2
wert_2mfg, 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_3Ausgabe in kla.txt:
wert_2
wert_2
wert_2eigentlich 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_3Ausgabe in kla.txt:
wert_1
wert_3mfg
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 dasListBox1->Items->SaveToFileexestiert^^
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 dasif( i > -1 ) //Für den fall, dass nichts selektiert istkann 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