1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

AppleScript zum Vokabeln lernen

Dieses Thema im Forum "AppleScript" wurde erstellt von Leonardo, 13.08.06.

  1. Leonardo

    Leonardo Rhode Island Greening

    Dabei seit:
    04.09.05
    Beiträge:
    479
    Salve an alle Apfeltalker

    Ich habe ein kleines Problem und dachte mir, ob nicht vielleicht jemand hier so freundlich sein könnte mir zu helfen. Ich muss bis heute abend noch zig Latein-Vokabeln lernen. Nicht nur das, in Zukunft werde ich andauernd schnell und effektiv Vokabeln lernen müssen, da ich den Sommer über einen Kurs besuche(n muss). Da ich hier niemanden habe, der mich Vokabeln abfragen könnte, dachte ich mir, könnte das doch vielleicht mein Mac für mich erledigen...

    Ich habe ganz früher (10 Jahre her?) einmal mit TurboPascal programmiert, seit einem Jahr bin ich jetzt ein glücklicher iBook besitzer und habe mich mit AppleScript noch nicht beschäftigt. Da mir heute auch die Zeit dazu fehlt, hier meine Bitte und Anfrage:

    Kann man mit Applescript eine Art Array festlegen, in das man Vokabeln einträgt, diese werden nummeriert, und dann per Zufallsgenerator auf dem Bildschirm ausgespuckt? Ist es ferner möglich, eine Eingabe mit der gespeicherten Übersetzung zu vergleichen? Also von der Programmlogik - wirklich ganz grob - ungefähr so:

    set vokabeln=[1, veni, ich kam; 2, vidi, ich sah; 3, vici, ich siegte]
    :abfragen
    generate zufallszahl
    :nochmalfragen
    ask "Was heißt [insert zufallszahl here]?" into usereingabe
    compare usereingabe with vokabeln.zufallszahl
    when usereingabe = vokabeln.zufalszahl
    say "superb! richtig!" goto abfragen
    else
    say "Nein du Haiopei"
    button "Überleg nochmal" --> goto nochmalfragen
    button "Auflösen" --> goto
    button "Andere Vokabel" goto abfragen


    Wenn jemand Lust und Zeit hat, sich an so eine Aufgabe zu machen, wäre ich ihm mehr als dankbar und würde mir natürlich - neben supergutem Karma - gerne auch noch ein Dankeschön ausdenken.

    Viele Grüße - nein - salve!
    euer Leonardo
     
  2. Leonardo

    Leonardo Rhode Island Greening

    Dabei seit:
    04.09.05
    Beiträge:
    479
    Wollte nur bescheid sagen, dass ich doch an dem Script arbeite. Nur, falls ihr daran am verzweifeln seid, ich auch ;) Wenn ich fertig bin, werde ich das Ergebnis hier posten.
    Bye
     
  3. MikeZ

    MikeZ Stina Lohmann

    Dabei seit:
    19.01.05
    Beiträge:
    1.022
    Nur mal so am Rande, wieso nimmst du nicht ProVoc? Ich bin ein richtiger Fan von dem Programm, ist gut zum vor Windows Usern angeben (Kärtchen drucken, Vokabeln als Diashow etcetc) :D und auch noch kostenlos!!. Außerdem lerne ich damit so schnell wie noch nie Vokabeln.

    Download-Tipp!:
    http://www.arizona-software.ch/applications/provoc/en/
     
    xgx7 und Leonardo gefällt das.
  4. Leonardo

    Leonardo Rhode Island Greening

    Dabei seit:
    04.09.05
    Beiträge:
    479
    Hallo MikeZ
    Danke für den Tipp, werde das gleich mal checken. Allerdings bin ich auch schon mit dem Script fertig geworden. Der Lerneffekt war ziemlich hoch - jedenfalls was die Sprach AppleScript angeht ;)
    Hier nun das Ergebnis

    Zuerst hab ich ein Script geschrieben, dass mich dazu bringt die Vokabeln einzugeben und diese in einer Textdatei abspeichert. Da das ganze noch ziemlich quick-and-dirty ist, muss ich die Vokabeln immer im Format LATEIN : DEUTSCH in eine Zeile eingeben. Naja.

    Code:
    set temp to display dialog "Wie viele Vokabeln eingeben?" default answer "" buttons {"OK"} default button 1
    set EingWdh to text returned of temp as number
    set Vokabelliste to ""
    repeat EingWdh times
        set Etemp to display dialog "Lateinvokabel:Deutschvokabel eingeben" default answer "" buttons {"OK"} default button 1
        set Vok to text returned of Etemp
        set Vokabelliste to Vokabelliste & Vok as list
    end repeat
    write Vokabelliste to file "MacintoshHD:Users:lquintero:Desktop:Vokabelliste.txt"
    
    Dann natürlich noch das zweite Script, welches mich zuerst fragt, wie viele Vokabeln ich lenen möchte und dann loslegt:
    Code:
    set VLAusDatei to read file "MacintoshHD:Users:lquintero:Desktop:Vokabelliste.txt" as list
    set FrageWiederholungen to display dialog "Wie viele Vokabeln abfragen?" default answer "" buttons {"OK"} default button 1
    set Wdh to text returned of FrageWiederholungen as number
    set oldDelimiters to AppleScript's text item delimiters
    set AppleScript's text item delimiters to ":"
    repeat Wdh times
        set Vokabel to some item of VLAusDatei
        set Abfrage to every text item of Vokabel
        set Eingabe to display dialog "Übersetze " & the first item of Abfrage default answer "" buttons {"OK"} default button 1
        set Tipp to text returned of Eingabe
        ignoring case
            if Tipp = the second item of Abfrage then
                say "Yes!"
            else
                set Aktione to display dialog "Nein." buttons {"Weiter", "Nochmal", "Auflösen"} default button 1
                set BtnAktione to button returned of Aktione
                if BtnAktione is "Auflösen" then display dialog the second item of Abfrage
                if BtnAktione is "Nochmal" then
                    set Aktione to display dialog "Übersetze nochmal: " & the first item of Abfrage default answer Tipp buttons {"OK"} default button 1
                    set Tipp to text returned of Aktione
                    if Tipp is the second item of Abfrage then
                        say "Yes!"
                    else
                        say "No. You are wrong. Check out another voc."
                    end if
                end if
            end if
        end ignoring
    end repeat
    set AppleScript's text item delimiters to oldDelimiters
    
    So, jetzt lade ich mir das empfohlene Programm von MikeZ runter :cool:
     
  5. pete

    pete Gast

    Schön, schön.

    Nette Idee, und ich habe eben auch ein Script dazu geschrieben, vielleicht gefällt es Dir, oder vielleicht findest Du darin andere nützliche Dinge. ;)

    Code:
    property textFileTypeID : "public.plain-text"
    property recordSeparator : return
    property fieldSeparator : tab
    
    property thePrompt : "Übersetzung für"
    property buttonOK : "OK"
    property buttonSolution : "Lösung"
    property buttonCancel : "Abbrechen"
    
    property errorNoValidFile : "Bitte öffnen Sie eine Textdatei mit unformatiertem Text. In jeder Zeile muss genau ein Vokabelpaar stehen und die Vokabeln müssen durch Tabulatorzeichen getrennt sein."
    
    on run
    	open ((choose file of type textFileTypeID without invisible) as list)
    end run
    
    on open dropList
    	my doVocabulary(dropList)
    end open
    
    on doVocabulary(dropList)
    	try
    		set vocabularyList to getVocabularyList(dropList)
    		repeat
    			set vocabularyItems to convertToList(some item of vocabularyList, fieldSeparator)
    			set theAnswer to ""
    			repeat while theAnswer is not (last item of vocabularyItems)
    				set theQuestion to thePrompt & space & quote & (first item of vocabularyItems) & quote & ":"
    				display dialog theQuestion default answer "" buttons {buttonCancel, buttonSolution, buttonOK} cancel button buttonCancel default button buttonOK
    				set theResult to the result
    				set theAnswer to the text returned of theResult
    				if the button returned of theResult is buttonSolution then
    					display dialog theQuestion & space & (last item of vocabularyItems) buttons {buttonCancel, buttonOK} cancel button buttonCancel default button buttonOK
    					set theResult to the result
    				end if
    			end repeat
    		end repeat
    	on error errorMessage number errorNumber
    		if errorNumber is not -128 then display dialog errorMessage
    	end try
    end doVocabulary
    
    to getVocabularyList(dropList)
    	repeat with fileAlias in dropList
    		if (type identifier of (info for (fileAlias)) is textFileTypeID) then
    			set vocabularyList to convertToList(readFile(fileAlias), recordSeparator)
    			if (((count vocabularyList) is greater than 1) and ((item 1 of vocabularyList) contains tab)) then return vocabularyList
    		end if
    	end repeat
    	error errorNoValidFile
    end getVocabularyList
    
    to convertToList(prmString, prmStringDelimiter)
    	set saveDelim to AppleScript's text item delimiters
    	set AppleScript's text item delimiters to (prmStringDelimiter as string)
    	set varList to ((every text item of (prmString as string)) as list)
    	set AppleScript's text item delimiters to saveDelim
    	return varList
    end convertToList
    
    to readFile(fileAlias)
    	return (do shell script ("cat" & space & (POSIX path of fileAlias)))
    end readFile
    
    Voraussetzung ist eine Textdatei mit den Vokabeln. Warum sollte man auch die Vokabeln mit AppleScript eingeben. Das kann Textedit besser. Und eigentlich reicht das Eingeben schon zum Lernen. :-D (geek, geek, geek)

    Die Textdatei muss aus unformatiertem Text bestehen, jedes Vokabelpaar muss durch Tabulatoren getrennt sein (eins oder mehrere, das spielt keine Rolle), und jedes Vokabelpaar muss in einer eigenen Zeile stehen. Die Prüfung der Textdatei durch das Script ist natürlich äußerst rudimentär.

    Dieses Script mit Script Editor als Programm abspeichern (ist auch hier im Anhang). Dann einfach Doppelklicken und im Dialog die Vokabeldatei aussuchen oder die Vokabeldatei per Drag and Drop auf das Programm ziehen.

    Leider werde ich nicht weiter antworten können oder diesen Thread verfolgen. Dies ist mein letzter Beitrag für eine Weile; ich schaue Ende des Monats nochmal rein. Aber das Script funktioniert!

    Gruß, Pete
     
    #5 pete, 13.08.06
    Zuletzt von einem Moderator bearbeitet: 20.10.06
    the x-master, xgx7 und Leonardo gefällt das.
  6. pete

    pete Gast

    Sorry!

    da war doch ein Fehler drin; Hier die korrigierte Version des "readFile"-Handlers:

    Code:
    to readFile(fileAlias)
    	return (do shell script ("cat" & space & (quoted form of (POSIX path of fileAlias))))
    end readFile
    
    Gruß, Pete
     

Diese Seite empfehlen