• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

AppleScript zum Vokabeln lernen

Leonardo

Rhode Island Greening
Registriert
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
 

Leonardo

Rhode Island Greening
Registriert
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
 

Leonardo

Rhode Island Greening
Registriert
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:
 

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
 
Zuletzt bearbeitet von einem Moderator:

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