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
    akari

    Danke.

    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:
    übersichtlich

    AnsiString 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:
    übersichtlich

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


Log in to reply