irgendwas mit char?
-
Joe_M. schrieb:
Am einfachsten dürfte es wohl über eine TStringList gehen. Ich würde pro Zeile der StringList eine englisch / deutsche Wortkombination eingeben, mit einem festen Trennzeichen dazwischen (ein Gleichheitszeichen z.B.).
Ich würde dringend ein Gleichheitszeichen empfehlen und mir dann mal die Eigenschaften Names und Values der TStringList
anschauen. Dann sparst Du Dir das Suchen nach dem Trennzeichen.Gruß,
Alexander
-
also, ich soll jetzt den text dort oben abschreiben, und dann soll das funktionieren? ach,so wegen dem .txt muss das eine bestimmte stelle haben, wo das liegt?
-
Erstell mit dem Notepad mal eine Datei in dem Projektverzeichnis. Ich nenne sie hier mal Vokabeln.txt. Dort fügst Du testweise mal ein paar Zeilen ein:
ja=yes
nein=no
vielleicht=maybeIn der Header-Datei gibst Du unter private: folgendes ein:
TStringList* slVokabeln; int iPosition, iFehler; AnsiString asDeutsch; AnsiString asEnglisch; void ZeileAufteilen(AnsiString Zeile);In der CPP:
void __fastcall TForm1::FormCreate(TObject *Sender) { slVokabeln = new TStringList(); slVokabeln->LoadFromFile("Vokabeln.txt"); iFehler = iPosition = 0; if (!slVokabeln->Text.IsEmpty()) // überhaupt was in der Liste? ZeileAufteilen(slVokabeln->Strings[iPosition]); // erstes Wortpaar in asDeutsch und asEnglisch laden Label1->Caption = asEnglisch; Edit1->Clear(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { if (slVokabeln) delete slVokabeln; } //--------------------------------------------------------------------------- void TForm1::ZeileAufteilen(AnsiString Zeile) { int pos = Zeile.AnsiPos("="); if (pos) { asDeutsch = Zeile.SubString(1, pos - 1); asEnglisch = Zeile.SubString(pos + 1, Zeile.Length() - pos + 1); } else { asDeutsch = ""; asEnglisch = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (Edit1->Text == asDeutsch) ShowMessage("Richtig!"); else { ShowMessage("Falsch!"); iFehler++; } iPosition++; Label1->Caption = ""; Edit1->Clear(); if (iPosition < slVokabeln->Count) { ZeileAufteilen(slVokabeln->Strings[iPosition]); Label1->Caption = asEnglisch; if (Edit1->CanFocus()) Edit1->SetFocus(); } else { ShowMessage("Fertig. Anzahl Fehler: " + AnsiString(iFehler)); } } //---------------------------------------------------------------------------Dies sollte Dir als Grundlage reichen. In diesem Code wird keinerlei Fehlerbehandlung durchgeführt. Es wird auch nicht auf ungültige Zeilen in der Vokabeln.txt geprüft. Außerdem ist der Aufbau stark verbesserungsbedürftig. Ich würde das so auf keinen Fall tatsächlich einsetzen. Aber als Ausgangsbasis ist es durchaus verwendbar...
Grüße
-
Eine solche Datei kannst Du auch ohne das Rad neu zu erfinden einlesen.
Joe_M. schrieb:
ja=yes nein=no vielleicht=maybeIch habe mir mal erlaubt ein paar Änderungen einzufügen, um mal die Verwendung von Names/Values zu veranschaulichen:
Header:
TStringList* slVokabeln; int iPosition, iFehler;CPP:
void __fastcall TForm1::FormCreate(TObject *Sender) { slVokabeln = new TStringList(); slVokabeln->LoadFromFile("Vokabeln.txt"); iFehler = iPosition = 0; Label1->Caption = slVokabeln->Names[iPosition]; Edit1->Clear(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { if (slVokabeln) delete slVokabeln; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (Edit1->Text == slVokabeln->Values[slVokabeln->Names[iPosition]]) ShowMessage("Richtig!"); else { ShowMessage("Falsch!"); iFehler++; } iPosition++; Label1->Caption = ""; Edit1->Clear(); if (iPosition < slVokabeln->Count) { Label1->Caption = slVokabeln->Names[iPosition]; if (Edit1->CanFocus()) Edit1->SetFocus(); } else { ShowMessage("Fertig. Anzahl Fehler: " + AnsiString(iFehler)); } } //---------------------------------------------------------------------------Wobei man natürlich den Code der in Button1Click steht auslagern sollte - aber Joe_M. hat ja bereits darauf hingewiesen.
Gruß,
Alexander
-
Seit langen habe ich mal wieder zu diesem Tehma eine Frage...
ich habe alles so gemacht wie gesagt und es hat alles geklappt.!

aber, wenn eine Vokabel mehrere bedeutungen hat wie kann ich das machen?ich habe mir das so vorgestellt: Yes=Ja=Nein=
diese ganzen bedeutungen, wenn mir das mal jemand sagen könnte wäre das ganz ok.ö
-
Du möchtest also für eine Vokabel mehrere Bedeutungen in Deiner Vokabel-Textdatei speichern? Dann vermute ich, dass Dein Beispiel
clekilein schrieb:
ich habe mir das so vorgestellt: Yes=Ja=Nein=
nur einfach unglücklich gewählt ist.
Du könntest sowas in einem solchen Format abspeichern:maybe=vielleicht,eventuell hot=heiß,scharf,echt geilDu hast dann natürlich keine exakte Zuordnung von einer Vokabel auf eine Übersetzung, so dass Du nicht einfach Values nutzen kannst.
Stattdessen könntest Du eine temporäre Stringliste nutzen, in die Du Values reinschmeißt (Text-Eigenschaft) und dann die Eigenschaft
CommaText nutzt, um die einzelnen Übersetzungen zu erhalten.
Wenn Du natürlich irgendwann auf die Idee kommen solltest, das ganze auch in umgekehrter Richtung zu machen, solltest Du Dir über
die Struktur noch mal eingehender Gedanken machen.Gruß,
Alexander
-
also jetzt nur durch kommata trennen und dann geht das ab?
-
clekilein schrieb:
also jetzt nur durch kommata trennen und dann geht das ab?
Wenn Du das andere, was ich geschrieben habe, auch beherzigst, dann sollte das abgehen.
Gruß,
Alexander
-
das funktioniert aber nicht, da muss ich dem mehrere Antworten mit komma getrennt sagen (also genau das was da steht!)
-
clekilein schrieb:
das funktioniert aber nicht, da muss ich dem mehrere Antworten mit komma getrennt sagen (also genau das was da steht!)
Das habe ich auch nicht behauptet. Du hast offensichtlich nicht alles durchgelesen, was ich geschrieben habe, obwohl ich Dich auf Dein
Nachfragen hin sogar nochmals darauf hingewiesen habe.
Ich darf mich nochmal selbst zitieren:Alexander Kempf schrieb:
Du hast dann natürlich keine exakte Zuordnung von einer Vokabel auf eine Übersetzung, so dass Du nicht einfach Values nutzen kannst.
Gruß,
Alexander
-
Oh, sorry ...und das ich eine temporäre Stringliste erstellen soll. Klingt gut! ?how do I have to do it?
wären da nicht doch zwei .txts besser?
-
clekilein schrieb:
wären da nicht doch zwei .txts besser?
Konkret?
-
Ja, ich habe nicht den besten Ausdruck...
1. Kannst du mir das mal mit den schönen temp. Strinlisten erklären?
(kurz mir sagen was ich machen muss)2. Zwei .txts = (Plural von) *.txt = um es in Worten zu fassen einfach zwei
Textdateien.Falls du jetzt denkst ich bin auf dem Gebiet nicht so richtig bewandert... äh ich bin einfach nur anfänger und dache halt das gänge mit char aber, da nicht.
Und somit habe ich mich halt etwas hinnein gesteigert.
-
clekilein schrieb:
1. Kannst du mir das mal mit den schönen temp. Strinlisten erklären?
Hi,
ich mach das mal.Also er meint das so: Du erstellt dir eine StringListe und schmeißt da per CommaText die einzelnen Übersetzungen rein...
Als nächstes überprüfts du ob die eingegebene Übersetzung in der StringList ist. Wenn ja -> Juhu, richtig!
Wenn nein -> Schade, falsch!Und dann die Stringliste wieder löschen!
Das war's dann...
MfG
Alexander Sulfrian
-
clekilein schrieb:
Zwei .txts = (Plural von) *.txt = um es in Worten zu fassen einfach zwei
Textdateien.Das war mir eigentlich schon klar. Unklar ist mir aber, was in den Textdateien stehen soll.
(Die Sache mit der temporären Stringliste hat Dir ja der andere Alexander erklärt)Gruß,
Alexander
-
Auf die Sache des ersten Alexander; Das war mir auch schon klar! Nur ich habe da das kleine Problem, welches eigentlich ein größeres ist, dass ich nicht konkret weiß, wie ich dem das da genau sagen soll (C++-code);
Ich weiß, dass zwar schon, nur ich weiß nicht wie der konkrete begriff für die Trennung mit komma heißt
(STRINGLISTE1=die Wörter pro Zeile, die durch ein Komma getrennt sind!);
Auf die gegenfrage was in den Textdateien stehen soll, da soll zum einen das Deutsche rein und in dem anderen die verschiedenen ausländischen Begriffe dazu,
Aber ich habe mir noch mal überlegt, dass das mit den Textdateien Quatsch ist.ALSO NUR EINE .TXT!
-
__property AnsiString CommaText = {read=GetCommaText, write=SetCommaText};
Ist eine Property von TStrings... einfach mal mit F1 die Hilfe aufrufen.
Dort ist es groß und breit erklärt. Dann noch etwas rumprobieren und mit dem Debugger das Ergebnis anschauen... fertig.
-
tut mir leid euch zu bemühen, klappte aber ´nicht so richtig!
SYNTAX-ERROR 
so, aber das kann auch daran liegen dass ich nicht recht weiß wo ich das ganze hinschreiben muss...
-
Hi
wie sieht denn Dein jetziger Versuch aus und was funktioniert nicht?
-
In den oberen postings steht das darin, was ich in meinem Programm stehen habe (außer kleiner Veränderungen). nur jetzt bekomme ich den oben stehenden Befehl.
aber.. ich weiß nicht ob ich das einfach unter der Befehlszeile schreibe, in der steht wo mein Rechner die Datei zu finden hat, oder muss ich da noch selbst was schreiben, wöllt ich ja gerne, weiß aber nicht was.Unter F1 steht zwar alles von a bis z, aber zu meinem Thema nichts...