Vocci Trainer

  • Hi @all

    Ich möchte einen kleine Vokabelntrainer programmieren (englisch - deutsch). Schlussendlich soll das ganze so funktionieren dass ein deutsches Wort angezeigt wird und ich in ein Textfeld die englische Übersetzung reinschreiben muss.

    Ich habe die ganzen Wörter in einer Excel Tabelle (eine Spalte englisch und eine deutsch)

    Da die Wörterliste später einfach anpassbar sein soll (und da es ziemlich viele Wörter sind) möchte ich diese nicht in meinem Quelltext stehen haben. Ich brauche die also in einer externen Datenquelle, welche ein "normaler Benutzer" einfach / gut anpassen kann.
    Ausserdem wäre es toll wenn es möglich wäre in diese "Datenquelle" zu jedem Wort (halt in einer neuen Spalte) eine Zahl hinein schreiben zu können (Wie oft das Wort falsch geschrieben/übersetzt wurde)

    Ich habe mich eine weile lang mit der Excel UDF herum geschlagen bis mir aufgefallen/eingefallen ist, dass man zur Verwendung des Vokabelntrainers dann Excel installiert haben müsste. Ich hätte aber gerne eine Lösung bei welcher ich zur Verwendung des Programms nicht zwingend ein zusätzliches Programm installiert haben muss. (Für die komfortable Bearbeitung der Wörterliste spielt das keine rolle)

    Ich hoffe man versteht was ich meine.

  • Du könntest dir als Textdatei eine kleine Datenbank anlegen.

    z.B. so:
    Deutsch | Englisch | Richtig | Falsch

    Kind|child|5|2;
    Baum|tree|4|0;
    Rot|red|7|1;

    Die Textdatei kannst du mit einem Stringsplit (mit ';' als Teiler) in Zeilen,
    und mit einem weiteren in Spalten zerlegen. (Vorher aber alle @CRLF (Zeilenumbrüche) per Stringreplace killen)

    Neue Vokabeln können einfach hinten dran gehängt werden.

  • Oder du benutzt das von Excel unterstützte .csv Format... Hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $Vokabeln = _GetList(@ScriptDir & '\vokabeln.csv')
    If Not IsArray($Vokabeln) Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($Vokabeln)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetList($File)
    If Not FileExists($File) Then Return -1
    Local $temp = StringRegExp(FileRead($File), '(?i)(.+);(.+);(.+);(.+)\s', 3)
    If Not IsArray($temp) Then Return -2
    Local $Return[UBound($temp) / 4 + 1][4], $c = 0
    $Return[0][0] = UBound($temp) / 4
    For $i = 1 To $Return[0][0]
    $Return[$i][0] = $temp[$c]
    $Return[$i][1] = $temp[$c + 1]
    $Return[$i][2] = $temp[$c + 2]
    $Return[$i][3] = $temp[$c + 3]
    $c += 4
    Next
    Return $Return
    EndFunc ;==>_GetList

    [/autoit]

    Edit: Falsch/Richtig Spalten ergänzt... :whistling:

  • ... Oder du arbeitest mit INI-Dateien.
    Diese sind wie folgt aufgebaut:

    Code
    [Sektion]
    Schlüssel1=Wert1
    Schlüssel2=Wert2
    ...
    Schlüssel_n = Wert_n


    Man könnte die INI also so aufbauen:

    Code
    [Blau]
    englisch=Blue
    richtig=3
    falsch=0
    [Gelb]
    englisch=Yellow
    richtig=2
    falsch=1


    Dann einfach mit IniRead/IniWrite auslesen/bearbeiten. :)

    Ooooder... Du greifst auf eine SQL-Datenbank zurück. Ist aber komplizierter.

    lg chess

  • Hallo Malibu28,

    eine starre 1:1 Übersetzug finde ich nicht sinnvoll, da viele Wörter mehrere Übersetzungsmöglchkeiten haben. Sieh dir dazu einfch einmal campweb | Oflline Deutsch<>English Übersetzter | Mit versch. Ü-Möglichkeiten an. Dass manche Wörter in der Lösung mehrfach vorkmmen liegt an der Dictionary-Datei. Bei 130.000 Schlagwörtern auch kein Wunder wenn da jemand beim Abschreiben den Überblick verloren hat ;)

    mfg autoBert

  • Hallo Malibu28

    Wie autoBert finde ich, dass mehrere Lösungen möglich sein sollten. D.h. dass du alle richtigen Lösungen in einem String zusammenfassen müsstest und dann deine Antwort als Teil des Strings suchen. Das von Faust vorbereiten ist harte Arbeit. Kannst du nicht mal versuchen in einem online Sprachtutorial die zu Lösungen suchen und damit zu üben bevor der Spass zum Frust wird?

  • Hi @all

    Als erstes mal Danke für die ganzen Antworten.
    Ich werde mir die Lösung von chris und mars mal anschauen (ist ja im prinzip fast dasselbe wenn ich das richtig verstanden habe).

    @humulus und autobert
    Ihr habt natürlich recht, dass es mehrere Übersetzungen gibt für die einzelnen Wörter ist natürlich vollkommen richtig. Der hintergrund hinter meinem dem Programm was ich schreiben möchte ist ein Schulprojekt. Das Ziel welches ich mir gesetzt habe, ist für das Englischbuch welches wir in der Schule verwenden (dazu gabs auch die Vokabelnliste mit den 1800 Einträgen) eine Übungssoftware zu programmieren. D.h die Wörter und die Übersetzungen sind quasi vorgegeben und stimmen halt mit dem Buch überein. Da ein gewisser Zeitdruck besteht, halte ich es für sinnvoll mich darauf zu beschränken die Übersetzungen aus dem Buch zu verwenden.
    Es gibt zwar auf der Vokabelnliste auch einige wenige Wörter mit mehreren bedeutungen (z.B. major) aber dafür hab ich auch schon Lösungen gefunden.

    Falls interesse besteht bin ich gerne bereit mein Projekt wenns denn was wird hier irgendwo hoch zu laden... denke aber, dass es für Leute mit einem anderen Englisch-Buch kaum nützlich ist.

    Vielen Dank nocheinmal für die Vorschläge und fürs mitdenken. :love:

    Greez Malibu

    PS: Ich lasse das Präfix mal noch offen, vielleicht tauchen ja während dem programmieren nocht andere Fragen und Probleme auf.

  • So... es ist nommal ne frage aufgetaucht.
    Und zwar bin ich auf ein Problem beim Programmieren gestossen. Wenn ich im gui $winAskDeTime in die Inputbox $inputSolution[1] etwas rein schreibe und dann "aus der input box raus gehe" (also daneben klicke oder mit tabulator weitergehe) wird GUIGetMsg() = $buttchooseunits

    $buttchooseunits ist ein button aus einem gui welches mit GuiDelete($winExerciseProperties) bereits gelöscht wurde. Ich hab absolut keinen plan wie das passiert / wie ich das lösen könnte und bin wirklich froh, wenn mir jemand einen tipp geben kann.

    hier der code:

    Spoiler anzeigen

    Im anhang findet man die "wordlist.csv" welche eingelesen wird und die UDF die ich zum einlesen verwende.
    Quelle: _CSV2Array (CSV-Dateien in Array einlesen)
    Ich habe allerdings Zeile 90 folgendermassen angepasst:
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^(""|'')(.*?)\1$', '$2')
    Der Grund dafür war, dass bei der Verwendung von " in der Wordlist im Programm immer 2 " eingeblendet wurden (""Beispiel"")

    Vielen Dank im Voraus
    Gruss Malibu28


    ****EDIT****:
    Da ich etwas unter Zeitdruck stehe habe ich jetzt mal weiter programmiert. Ich bekomme jetzt einen ähnlichen Effekt noch einmal und zwar wenn ich den "Zeitmodus" Radiobutton anwähle, wird ein button aktiviert der noch gar nicht da war (aus einem gui das erst später zum ersten mal verwendet wird)


    ich versteh das wirklich nicht und wahrscheinlich stellt sich dann raus, dass es wieder ein Anfänger Fehler ist ;(