AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Selbstprogrammierung eines Vokabeltrainers
Thema durchsuchen
Ansicht
Themen-Optionen

Selbstprogrammierung eines Vokabeltrainers

Ein Thema von Soph6297 · begonnen am 27. Mai 2014 · letzter Beitrag vom 21. Jun 2014
Antwort Antwort
Seite 1 von 2  1 2      
Dejan Vu
(Gast)

n/a Beiträge
 
#1

AW: Selbstprogrammierung eines Vokabeltrainers

  Alt 28. Mai 2014, 07:17
Er liest eine Textdatei in eine Listbox ein. Wo ist da das Problem? Die Vorgabe war 'Textdatei oder typisierte Datei'.

Textdateien sind bei einfachen Sachen vorzuziehen, das man sie mit jedem Notepad-Derivat bearbeiten kann.

In deiner Textdatei muss neben dem Text, der das geschichtliche Ereignis beschreibt, auch die Jahreszahl stehen.
Damit das Programm die beiden Werte voneinander unterscheiden kann, sollte man sie markieren, z.B. mit einem Trennzeichen: "1939;Beginn des 2.Weltkrieges"

Damit kannst Du die Daten aber nicht einfach so ins Ereignispanel schreiben, sondern musst vorher Jahr von Ereignis trennen,

Delphi-Quellcode:
// Statt
// EreignisPanel.Caption:=ListBox1.Items.Strings[Zufall];
  TrenneJahrUndEreignis (ListBox1.Items.Strings[Zufall], FJahr, Ereignis);
  EreignisPanel.Caption := Ereignis;
...
'Ereignis' ist eine lokale String-Variable (die musst Du deklarieren, weißt Du, wo?)
'FJahr' ist ein privates Feld. Weißt Du auch, wo du das deklarieren musst?

Im OnClick des OK-Buttons vergleichst Du nun die Jahreszahleinfabe mit dem Feld 'FJahr' und gibst eine entsprechende Meldung aus.

Ach, trennen musst Du ja noch:
Delphi-Quellcode:
Procedure TForm1,TrenneJahrUndEreignis (text : String; Var jahr, ereignis : string);
Begin
  ...
  jahr := ...
  ereignis := ...
End;
Hier wird dir 'Pos' und 'Copy' weiterhelfen, und die Tatsache, das z.B. das Semikolon Jahr und Ereignis trennt.

Mehr Hilfe gibt es aber nicht
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: Selbstprogrammierung eines Vokabeltrainers

  Alt 28. Mai 2014, 07:25
Delphi-Referenz durchsuchenTStrings.Values und Delphi-Referenz durchsuchenTStrings.Names könnten auch hilfreich sein, dann muss man nicht selbst mit Stringfunktionen herumhantieren, sofern die Datei das entsprechende Format hat.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Selbstprogrammierung eines Vokabeltrainers

  Alt 28. Mai 2014, 07:29
Ach, trennen musst Du ja noch:
Delphi-Quellcode:
Procedure TForm1,TrenneJahrUndEreignis (text : String; Var jahr, ereignis : string);
Begin
  ...
  jahr := ...
  ereignis := ...
End;
Hier wird dir 'Pos' und 'Copy' weiterhelfen, und die Tatsache, das z.B. das Semikolon Jahr und Ereignis trennt.

Mehr Hilfe gibt es aber nicht
Also wenn schon liest man das nicht in eine unsichtbare Listbox ein und trennt dann mühevoll via Pos und Copy, sondern verwendet gleich zwei lokal deklarierte Stringlisten, wovon die eine zur Trennung der Werte der CSV-Datei dient. Das Ergebnis kommt dann in ein entsprechendes Record-Array, so daß Jahr und dazugehörendes geschichtliches Ereignis stets durch dieselbe ID verbunden sind. Auf die ID kann man dann locker einen Zufallsgenertator ansetzen.
  Mit Zitat antworten Zitat
Alt 28. Mai 2014, 07:30     Erstellt von Dejan Vu
Dieser Beitrag wurde von MrSpock gelöscht. - Grund: Persönlicher Angriff.
Alt 28. Mai 2014, 07:34     Erstellt von Perlsau
Dieser Beitrag wurde von MrSpock gelöscht. - Grund: Antwort auf persönlichen Angriff.
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: Selbstprogrammierung eines Vokabeltrainers

  Alt 28. Mai 2014, 08:00
Meine Variante kommt mit einer Stringliste aus.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Selbstprogrammierung eines Vokabeltrainers

  Alt 28. Mai 2014, 08:14
Wollen wir den Fragesteller weiter verwirren? Ich wollte wirklich seinen unvollkommenen Ansatz nehmen und ihn nur minimalinvasiv in die richtige Richtung stupsen. Wenn er mit Stringlisten ankommt, die sein Lehrer vielleicht nicht auf dem Schirm hat, gibt es vielleicht Probleme. Schon das Einführen einer Prozedur hat mich Überwindung gekostet, denn es gibt ja Programmierer (und Lehrer halten sich dafür), die Prozeduren nur verwenden, um DRY zu vermeiden, aber nicht, um lesbaren Code zu schreiben.

Ich geh jetzt Kollegen ärgern ('Arbeiten').
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#8

AW: Selbstprogrammierung eines Vokabeltrainers

  Alt 28. Mai 2014, 08:55
Ich meinte mit "Stringliste" nicht zwingend TStringlist, sondern allgemein jeden TStrings-Abkömmling, der die oben genannten Methoden bereitstellt, meinetwegen also auch TListBox.Items.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Soph6297

Registriert seit: 27. Mai 2014
13 Beiträge
 
#9

AW: Selbstprogrammierung eines Vokabeltrainers

  Alt 13. Jun 2014, 12:49
Entschuldigt meine kürzliche Inaktivität.

Er liest eine Textdatei in eine Listbox ein. Wo ist da das Problem? Die Vorgabe war 'Textdatei oder typisierte Datei'.

Textdateien sind bei einfachen Sachen vorzuziehen, das man sie mit jedem Notepad-Derivat bearbeiten kann.

In deiner Textdatei muss neben dem Text, der das geschichtliche Ereignis beschreibt, auch die Jahreszahl stehen.
Damit das Programm die beiden Werte voneinander unterscheiden kann, sollte man sie markieren, z.B. mit einem Trennzeichen: "1939;Beginn des 2.Weltkrieges"

Damit kannst Du die Daten aber nicht einfach so ins Ereignispanel schreiben, sondern musst vorher Jahr von Ereignis trennen,

Delphi-Quellcode:
// Statt
// EreignisPanel.Caption:=ListBox1.Items.Strings[Zufall];
  TrenneJahrUndEreignis (ListBox1.Items.Strings[Zufall], FJahr, Ereignis);
  EreignisPanel.Caption := Ereignis;
...
'Ereignis' ist eine lokale String-Variable (die musst Du deklarieren, weißt Du, wo?)
'FJahr' ist ein privates Feld. Weißt Du auch, wo du das deklarieren musst?

Im OnClick des OK-Buttons vergleichst Du nun die Jahreszahleinfabe mit dem Feld 'FJahr' und gibst eine entsprechende Meldung aus.

Ach, trennen musst Du ja noch:
Delphi-Quellcode:
Procedure TForm1,TrenneJahrUndEreignis (text : String; Var jahr, ereignis : string);
Begin
  ...
  jahr := ...
  ereignis := ...
End;
Hier wird dir 'Pos' und 'Copy' weiterhelfen, und die Tatsache, das z.B. das Semikolon Jahr und Ereignis trennt.

Mehr Hilfe gibt es aber nicht
Um nochmal darauf zurückzukommen - ich habe versucht mich mit all den gegebenen Möglichkeiten vertraut zu machen, finde aber, dass ich mit dieser Variante am besten klar kommen werde, da wir es z.T. auch schon behandelt haben.
Ich hab mich mal dran versucht mit Pos und Copy zu arbeiten, komme allerdings nicht wirklich weiter; Delphi zeigt Fehler an, wo ich weiß, dass es falsch ist, ich aber auf keinen grünen Zweig komme... /:

Delphi-Quellcode:
private
    { Private-Deklarationen }
    FJahr:string;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var Jahreszahl:Integer;
     Datei: file of byte;
     
procedure Trennung(text:String);
var Jahr,Ereignis,Gesucht:String;

begin
AssignFile(Datei,'TextEreignis.txt');
Reset(Datei);
while not eof(Datei) do
begin
 Readln(Datei,Gesucht);
 if pos(';',Datei) > 0 then
 copy (Datei,5,20);
 ...
jahr:=
ereignis:=
end;
Es scheitert bei mir an der Verwendung von Pos und Copy. Ich weiß, wozu man sie benutzt, aber WIE ist mir in diesem Fall unklar. Ich weiß, dass sich in dem Quelltextausschnitt Fehler verstecken und wenn ihr einen findet, würde ich mich freuen, wenn ihr ihn mir nennen würdet.
D.h. ich bräuchte jetzt nochmal einen Anstoß für die richtige Verwendung von Pos und Copy...


@ Sir Rufo;
Wenn ich mit TString arbeiten würde, wo würde ich denn dann in deinem Quelltext den Zugriff auf meine Textdatei unterbringen?


Danke!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#10

AW: Selbstprogrammierung eines Vokabeltrainers

  Alt 13. Jun 2014, 12:57
Delphi-Quellcode:
const
  FRAGE_ANTWORT = 'Die Frage nach dem Leben, dem Universum und einfach Allem;42';
  TRENNER = ';';
var
  iPos: integer;
  Frage, Antwort: string;
begin
  (* Position des Trennzeichens ermitteln *)
  iPos := Pos(TRENNER, FRAGE_ANTWORT);
  (* Wenn gefunden *)
  if iPos > 0 then
    begin
      (* Von Stringanfang bis ausschließlich Trennzeichen kopieren *)
      Frage := Copy(FRAGE_ANTWORT, 1, iPos - 1);
      (* Nun alles hinter dem Trennzeichen *)
      Antwort := Copy(FRAGE_ANTWORT, iPos + 1);
      ShowMessage('Frage: ' + Frage + sLineBreak + 'Antwort: ' + Antwort);
    end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz