• 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

Taschenrechner

the x-master

Riesenboiken
Registriert
29.01.06
Beiträge
290
Hallo liebes Forum,

ich tüftle gerade ein bisschen mit dem Script Editor herum...
Mein Ziel war ein ganz billiger Rechner. Also man gibt eine Aufgabe (z.b. 8+8) und er rechnet es aus & gibt das Ergebnis in einem display dialog aus.
Eigentlich doch völlig einfach. ;) Doch als ich das ganze ausprobierte, geht es nicht. :(
Also hier der Code:

Code:
set calc1 to the text returned of (display dialog "Rechne:" buttons {"OK"} default button 1 default answer "")
display dialog calc1

Allerdings wollte ich ja nicht nochmal das bekommen, was ich eingeben habe.
Ich wollte ja das Ergebnis haben.
Also habe ich es nochmal mit:

Code:
set calc1 to the text returned of (display dialog "Rechne:" buttons {"OK"} default button 1 default answer "")
display dialog the result of calc1

...probiert.
Geht auch nicht. :(

Auch:

Code:
set calc1 to the text returned of (display dialog "Rechne:" buttons {"OK"} default button 1 default answer "")
display dialog calc1 as number

...geht nicht. :(

Jetzt habe ich aber nur mal kurz:

Code:
get 8+8

geschrieben und Tada - er macht's. Mir scheint, dass die Anführungsstrichel da weg sollten. Aber wie ?
(Warscheinlich wieder ganz einfach ;))

Vielen Dank :-D & herzliche Grüße,

X.
 
Zuletzt bearbeitet:

pete

Gast
Hallo x-master,

was bei display dialog zurückgegeben wird, ist vom Typ "text", deswegen kann es nicht berechnet werden. Für eine Umwandlung könntest Du eine Liste erzeugen, indem Du alle Zahlen und Operatoren mit "every word of" trennst. Danach wäre es möglich, die gesamte Liste mit einer Schleife durchzugehen, Operatoren und Werte zu trennen und dann Berechnungen durchzuführen.

Zum Glück gibt es mit "run script" einen viel einfacheren Weg:

Code:
set calc1 to the text returned of (display dialog "Rechne:" buttons {"OK"} default button 1 default answer "")
display dialog (run script calc1)
 

pi26

Adams Parmäne
Registriert
17.12.04
Beiträge
1.297
the x-master schrieb:
geschrieben und Tada - er macht's. Mir scheint, dass die Anführungsstrichel da weg sollten. Aber wie ?


so geht es auch mit Anführungstrichel ;)

set aufgabe to "3+(7*4)"
set ergebnis to (run script aufgabe)
display dialog ergebnis
display dialog ergebnis *2

Oder man bastelt sich eine Evaluate-Funktion auf dieser Grundlage:

display dialog evaluate("3+(7*4)")

on evaluate(thetext)
return run script thetext
end evaluate




mfg pi26
 
Zuletzt bearbeitet:

pete

Gast
pi26 schrieb:
so geht es auch mit Anführungstrichel ;)

Danke, pi26, das war natürlich x-masters Frage. :)

Ich darf noch ergänzen, dass alle Variablen in AppleScript in Klasse "Text" umgewandelt werden, wenn man sie in Anführungszeichen setzt. Zu welcher Klasse die zurückgebenen Werte einer Funktion gehören, kann man fast immer den Funktionsbibliotheken entnehmen. Im Fall von "display dialog" lässt sich das sogar direkt am Namen des Rückgabewerts erkennen ("text returned of", "button returned of").
 

pete

Gast
In den Beispielen oben wurde mit "run script" lediglich ein Text in Variablen zerlegt, was letztlich nur funktioniert, weil AppleScript die meisten Variablentypen automatisch erkennt und zuordnet.

Der Befehl "run script" ist vor allem dazu gedacht, komplette Scripts, die direkt als Text eingegeben werden oder in einer Variablen gespeichert werden, auszuführen.

Alternativ dazu kann man auch Scripts ausführen, die in einer Datei gespeichert sind oder als "script objects" definiert werden.

Beispiel für Dateien:

Die Datei läge als "xyz.scpt" auf dem Desktop, z.B. mit diesem Inhalt:

Code:
on doHandler1()
	beep 1
end doHandler1

Ausführen kann man die Script-Datei in einem anderen Script so:

Code:
property myScript : load script file (((path to desktop) as string) & "xyz.scpt")

tell myScript to doHandler1()

Script-Objekte funktionieren ähnlich und werden detailliert im AppleScriptLanguageGuide ab Seite 325 beschrieben.
 

the x-master

Riesenboiken
Registriert
29.01.06
Beiträge
290
Hallo pete, hallo pi26,

vielen Dank für eure Antworten. Da habe ich ja wieder mehr als ich wollte gelernt, super ! :)
Die "Skript-Ausführen" - Funktion ist ja wirklich sehr interessant.
Trotzdem ist meine Taschenrechner - Frage doch nicht so einfach.
Ich dachte, dass ich vielleicht ein paar Anführungstrichel vergessen & o. zuviel gesetzt habe.
Ach ja, pi26, danke, dass du mir das nochmal in Anführungstrichel aufgeschrieben hast :).

Herzliche Grüße,

X.

(Ich konnte erst jetzt antworten, da ich für drei Wochen im Urlaub an der Nordsee gewesen bin ;))