Autor Beitrag
Sauerbraten
Hält's aus hier
Beiträge: 8


Delphi 7
BeitragVerfasst: Mo 24.05.10 19:23 
Hallo liebes Forum.
Hab eine kleine Hürde, undzwar möchte ich ein Vokabeltrainer programmieren, wo der Nutzer über eine Eingabemaske das Deutsch und das dazugehörige Fremdwort speichert (über 2 Editfelder) und diese in ein .txt Dokument schreibt. Das Funktioniert auch ganz gut. Nur möchte ich einen Lernmodus dafür erstellen, indem ein zufälliger deutscher Begriff aus der .txt ausgelesen wird und man das entsprechende Fremdwort eigibt und auf "Überprüfen" klickt.
Wie schreibe ich dieses zufällige auslesen? Auch dass der Nutzer mal den Deutschen und dann das Fremdwort Raten muss?

By the Way: So werden Daten in der Textdatei gespeichert:

----------
der Hund
the dog
----------
die Gitarre
the guitar
----------
sich kratzen
to scratch


...also zuerst eine Line mit Strichen (zur Orientierung), dann der Deutsche Begriff und dann das Fremdwort.

Vielen Dank im Vorraus
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 24.05.10 19:29 
Hallo und :welcome: im Delphi-Forum!

Am besten wäre es wenn du nicht immer bei einer neuen Runde das Wort aus der Textdatei lädst, sondern dir ein dynamisches Array machst von einem Datentyp (Record zb) in der du die Wortpaare speicherst. So kannst du das ganze viel effizienter Verwalten und könntest auch so was schönes implementieren wie das wörter die falsch übersetzt wurden öfter dran kommen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Sauerbraten Threadstarter
Hält's aus hier
Beiträge: 8


Delphi 7
BeitragVerfasst: Mo 24.05.10 20:20 
^^ Ohjeh, wusste dass das kommt...
Wenn ich gesteh, bin ich noch n Delphi Neuling und hab erst dieses Schuljahr Delphi im Unterricht. Arrays hatte ich schon, aber erst vom Typ String und Integer...

Mein theoretischer Gedankengang war, dass er beim Eintreten in den Lernmodus (übers Hauptmenü) eine EOF schleife laufen lässt, in der er zählt, wie viele Zeilen die Datei hat, durch 3 teilt (Weil beim hinzufügen immer 3 zeilen erstellt werden, s.o.) und das als max. anzahl für random speichert. Und daraus die Randomzahl dann als Zeile in dem Dokument aufruft und 1 teil davon läd...
geht dass denn auch sorum? auch wenns komplizierter ist ;-)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 24.05.10 21:56 
Nimm lieber eine TStringList. Dann kannst du die Daten einfach mit = getrennt in die Datei speichern und kannst direkt auf die Daten zugreifen ohne dazu eigenen Code schreiben zu müssen...

Siehe Suche in der Delphi-Reference TSTRINGS.NAMES, Suche in der Delphi-Reference TSTRINGS.VALUEFROMINDEX, Suche in der Delphi-Reference TSTRINGS.VALUES. Zum Laden und Speichern reicht dann LoadFromFile bzw. SaveToFile.
Sauerbraten Threadstarter
Hält's aus hier
Beiträge: 8


Delphi 7
BeitragVerfasst: Di 25.05.10 07:38 
Cool, danke!
Und werden diese Daten auch in einer .txt Datei gespeichert? Oder im Programm selber? Könnt ihr dafür vieleicht ein Code Beispiel schreiben, für das Speichern, bzw. zufällige laden?
MaPsTaR
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 90
Erhaltene Danke: 4

Win XP
Delphi 7 Enterprise
BeitragVerfasst: Di 25.05.10 10:03 
Hallo, die Delphi-Hilfe [F1] hätte dir zwar das gleiche verraten können, aber okay...

Die Daten stehen vorerst im Speicher und werden dann über SaveToFile() in einer txt-Datei gespeichert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  [...]
  public
    { Public-Deklarationen }
    Daten: TStringList;
  end;


Eintrag hinzufügen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.BSaveWordClick(Sender: TObject);
begin
  Daten.Add(EDeutsch.Text + '=' + EEnglisch.Text);
end;

Speichern der Daten
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.BSpeichernClick(Sender: TObject);
begin
  Daten.SaveToFile(ExtractFilePath(ParamStr(0)) + 'de-en.txt');
end;

Du lädst nicht die einzelnen Werte zufällig, sondern erst einmal die komplette Datei:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Daten := TStringList.Create;
  Daten.NameValueSeparator := '=';
  if FileExists(ExtractFilePath(ParamStr(0)) + 'de-en.txt')
  then
    Daten.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'de-en.txt');
end;


Dann kannst du mit den von user profile iconjaenicke genannten Funktionen auf die einzelnen Einträge zugreifen.
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Siehe Suche in der Delphi-Reference TSTRINGS.NAMES, Suche in der Delphi-Reference TSTRINGS.VALUEFROMINDEX, Suche in der Delphi-Reference TSTRINGS.VALUES.



ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Daten.Free;
end;

_________________
Liebe Kinder, es stimmt ... solnage auch nur der ertse und lezte Bchutsabe rihctig ist und alle andreen Bcuhsatben irgendwie vorahnden sind,
dann knan man es dennonch lesen, also macht nur weiter so, wir verstehen euch schon
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Mi 26.05.10 10:23 
Entschuldigung - ich würde das deutsche und englische Wort in etwa so
to send = verschicken
direkt in eine Zeile schreiben und das ganze dann mit dem z.B. im Thread Zwei Wörter die mit ' - ' im String getrennt sind trennen vorgeschlagenen durch das Gleichheitszeichen trennen.
Das wäre zumindest für mich übersichtlicher.

PS: Also so wie es wohl auch user profile iconMaPsTaR gedacht hat.