Wörter aus Datei "daten.txt" lesen
-
Hallo
Ich weiß nicht wie ich das tun soll.
Also ich möchte einen Vokabeltrainer basteln. (Deutsch/Französisch)
Ich habe eine Datei "daten.txt" angelegt.
Die sieht z.B. so aus:
das Haus la maison der Wagen la voiture das Schrank l'armoire
Ich lese die Datei "daten.txt" in eine ComboBox:
ComboBox1->Items->LoadFromFile("daten.txt");
Dann lese ich die CombBox1 in eine Memo:
Memo1->Lines->Text = ComboBox1->Items->Text;
Oder nur eine Zeile in eine Edit:
Edit1->Text = ComboBox1->Items->Strings[1];
Nun möchte ich aber z.B. in Memo1 nur die deutschen Vokabel stehen sehen:
Also:
das Haus der Wagen der Schrank
Der Datensatz einer Zeile in der "daten.txt" besteht ja aus 4 Wörtern.
Wie kann ich aus der ComboBox Items nur die deutschen Vokabel auslesen?
Oder muß ich die Datei "daten.txt" anders auslesen, z.B. mit "fstream" oder "ifstream".
Ich wäre froh wenn mir jemand dabei helfen könnte.
Danke.
-
Die Frage ist, ob das immer 4 Wörter sind. ansonsten mußt Du ein Trennzeichen benutzen. (vielleicht auch ne ini-file als Daten Base)
Schau in der BCB-Hilfe unter "AnsiString" -> "Methoden", wie man einen String zerlegt.
-
ich denke Du solltest auf jeden Fall ein CSV-Fomat wählen.
D.h. deine Einträge in der Text-Datei werden z.B. durch ein ";" getrennt.Gruß
Wes
-
Hiermit kann ich die Zeichen bis zum Leerzeichen lesen:
das Haus, la maison
Edit1->Text = ComboBox1->Items->Strings[0].LastDelimiter(',');
In Edit1->Text steht dann 9. Also 9, das Zeichen Komma.
Jetzt muß ich probieren, wie ich die 8 Zeichen davor (das Haus) in Text umwandeln kann.
-
Hallo
Siehe AnsiString::SubString
bis bald
akari
-
akari schrieb:
Hallo
Siehe AnsiString::SubString
bis bald
akariDanke.
OK, ich habs:
ComboBox1->Items->LoadFromFile("daten.txt"); d = ComboBox1->Items->Strings[0]; dat = d.SubString(d.LastDelimiter(",")==0,d.Length()-d.LastDelimiter(",")-1); Edit1->Text = dat;
In Edit1 steht jetzt nur "das Haus".
Mit:
dat = d.SubString(d.LastDelimiter(",")+1,d.Length()-d.LastDelimiter(","));
steht in Edit1 "la maison"
Vielleicht gibt es auch einen kürzeren Weg, aber der hier funktioniert.
-
Verbesserung:
dat = d.SubString(d.LastDelimiter(",")==0,d.Length()-d.LastDelimiter(",")-2);
Dann ist auch das Komma-zeichen weg.
-
d.LastDelimiter(",")==0
ich würde das so machen:
übersichtlichAnsiString d = ComboBox1->Items->Strings[ComboBox1->ItemIndex]; int TrennPos = d.LastDelimiter(","); d = d.SubString(1,TrennPos -1); Edit1->Text = d;
oder confuse
Edit1->Text = ComboBox1->Items->Strings[ComboBox1->ItemIndex].SubString(1,ComboBox1->Items->Strings[ComboBox1->ItemIndex].LastDelimiter(",") -1);
oder wahrscheinlich so
AnsiString d = ComboBox1->Items->Strings[ComboBox1->ItemIndex]; Edit1->Text = d.SubString(1,d.LastDelimiter(",") -1);
kanst auch mit SetLength arbeiten.
-
OldMan00 schrieb:
d.LastDelimiter(",")==0
ich würde das so machen:
übersichtlichAnsiString d = ComboBox1->Items->Strings[ComboBox1->ItemIndex]; int TrennPos = d.LastDelimiter(","); d = d.SubString(1,TrennPos -1); Edit1->Text = d;
oder confuse
Edit1->Text = ComboBox1->Items->Strings[ComboBox1->ItemIndex].SubString(1,ComboBox1->Items->Strings[ComboBox1->ItemIndex].LastDelimiter(",") -1);
oder wahrscheinlich so
AnsiString d = ComboBox1->Items->Strings[ComboBox1->ItemIndex]; Edit1->Text = d.SubString(1,d.LastDelimiter(",") -1);
Es geht auch mit:
d.SubString(d.LastDelimiter(",")<1,
Ich habe Ihren Code ausprobiert, aber es steht kein Text in Edit1.
-
Verzeihung.
Nehme das zurück: (Ich habe Ihren Code ausprobiert, aber es steht kein Text in Edit1.)
Habe noch nicht die anderen Möglichkeiten ausprobiert.
-
OldMan00 schrieb:
oder wahrscheinlich so
AnsiString d = ComboBox1->Items->Strings[ComboBox1->ItemIndex]; Edit1->Text = d.SubString(1,d.LastDelimiter(",") -1);
Ich nehme das. Meins war falsch.
Bei [ComboBox1->ItemIndex] muß ich aber die Nummer vom Index eingeben, sonst sehe ich kein Text in Edit1. Also [ComboBox1->ItemIndex,2]
Wie bekomme ich jetzt aber alle Items aus der ComboBox in die ListBox auch nur bis zum Komma?
danke
-
Marc schrieb:
Bei [ComboBox1->ItemIndex] muß ich aber die Nummer vom Index eingeben, sonst sehe ich kein Text in Edit1. Also [ComboBox1->ItemIndex,2]
dann setzte halt Style auf csDropDownList oder will Du Einträge in die ComboBox per Hand eingeben wollen ? Am besten Du setzt den code in das OnClick Ereignis der ComboBox.
Marc schrieb:
Wie bekomme ich jetzt aber alle Items aus der ComboBox in die ListBox auch nur bis zum Komma?
durch eine z.B. 'for' Schleife.