Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Applescript - Überprüfen, ob Variable eine Zahl ist

Applescript - Überprüfen, ob Variable eine Zahl ist

Nebu2k15.09.0620:24
Gibt es eine Möglichkeit zu überprüfen, ob es sich bei einer Variablem um eine Zahl handelt?
Hatte es mit if variable is not real then … probiert. Das funktioniert leider nicht.
Danke im Voraus.
0

Kommentare

_mäuschen
_mäuschen15.09.0620:50

if (class of foo is integer) or (class of foo is real) then
0
Nebu2k15.09.0620:56
Funktioniert nicht.
Habe:
set Feld to Feld as real
if (class of Feld is not integer) or (class of Feld is not real) then set Feld to 0

Egal was ich in Feld dann eingebe, es wird immer auf 0 gesetzt.
0
Nebu2k15.09.0621:13
Und, wie erstelle ich ein else?
Habe:
if (class of Feld1 is integer) or (class of Feld1 is real) then set Feld1 to Feld1

Wenn ich nun dahinter ein else schreibe kommt eine Fehlermeldung, von wegen Zeilenende, etc erwartet.
0
_mäuschen
_mäuschen15.09.0621:16

Da Du ja den möglichen Integer mit set Feld to Feld as real nach Real wandelst

genügt

if not class of Feld is real then set Feld to 0
0
Nebu2k15.09.0621:20
Ja, das ist es! Vielen Dank!!!
0
Nebu2k15.09.0621:23
Oder auch nicht.
Es wird nun nicht mehr zur 0 verwandelt, aber wenn es kein real ist bekomme ich den display alert, also es wird nicht zur 0 gewandelt.
0
Nebu2k15.09.0621:28
Könnte es daran liegen, dass egal was ich ins Textfeld eingebe es in real gewandelt wird, daher wirds nicht zur 0 gewandelt. Und die Fehlermeldung bekomme ich weil es ja dann keine real zahl ist, obwohl sie als solche deklariert ist?!?
Wie kann ich das Problem lösen?
0
_mäuschen
_mäuschen15.09.0621:30

Wenn Du Text eingibst:-/ und nach Real wandelst?
0
Nebu2k15.09.0621:34
Ja. Ich will es Idiotensicher machen.
0
Nebu2k15.09.0621:42
Im Grunde muss ich ja die Überprüfung vor dem ins Real wandeln machen. Nur dort ist es ja noch ein String, also wird nicht als Real oder Integer erkannt.
0
_mäuschen
_mäuschen15.09.0621:46

try
set foo to foo as real
on error
display dialog "You did not enter a (valid) number."
end try
0
Nebu2k15.09.0621:46
Vielleicht gibt es ja auch eine Möglichkeit, dass man von vornherein nur Zahlen in das Textfeld eingeben kann…
0
Nebu2k15.09.0621:50
Im Grunde habe ich es so. Nur missfällt mir daran, dass sich das Programm dann beendet. Außerdem habe ich 3 Felder, sodass selbst wenn beim ersten keine Zahl eingegeben wurde noch die nächsten beiden erscheinen.
0
Nebu2k15.09.0621:53
Dass sich das Programm, dann nicht beendet, sondern neustartet, bekomme ich noch hin.
Bleibt das Problem, das die weiteren Fenster trotzdem noch angezeigt werden.
0
Nebu2k15.09.0621:53
Ah, hab gerade eine Idee…
0
Nebu2k15.09.0621:57
Habs. Danke für deine Anregungen.
0
_mäuschen
_mäuschen15.09.0621:58



Zeig mal das Ganze im Kontext
0
Nebu2k15.09.0622:06
on run
set Feld1 to text returned of (display dialog "Energie (kcal) pro 100g:" default answer "" buttons {"Weiter"} default button 1)
try
set Feld1 to Feld1 as real
set Feld2 to text returned of (display dialog "Fett (g) pro 100g:" default answer "" buttons {"Weiter"} default button 1)
set Feld2 to Feld2 as real
set Feld3 to text returned of (display dialog "Portionsgröße (g):" default answer 100 buttons {"Berechne"} default button 1)
set Feld3 to Feld3 as real
set ergebnis to ((Feld1 / 60) + (Feld2 / 9)) * (Feld3 / 100)
set ergebnis to (round (ergebnis * 10) rounding as taught in school) / 10
set ergebnis to ergebnis as string
set Feld1 to (round (Feld1))
set Feld3 to (round (Feld3))
display dialog ergebnis & " Points" & return & return & "Energie: " & tab & tab & tab & Feld1 & " kcal" & return & "Fett : " & tab & tab & tab & Feld2 & " g" & return & "Portionsgröße: " & tab & Feld3 & " g" buttons {"Fertig"} & {"Erneut berechen"} default button 2
if button returned of result = "Erneut berechen" then run
on error
display dialog "Fehler!!!" buttons {"Abbrechen"} & {"Erneut berechen"} default button 2
if button returned of result = "Erneut berechen" then run
end try
end run
0
Nebu2k15.09.0622:09
Ein Fehler ist noch drin.
Wenn man ein paar mal die Rechnung durchgeführt hat und danach ein Fehler kommt, muss man genauso oft auf Abbrechen drücken, wie man vorher die Rechnung wiederholt hat. Mir ist auch klar warum aber mir fällt nicht ein wie ich es lösen könnte. Hast du vielleicht eine Idee?
0
_mäuschen
_mäuschen15.09.0622:29

Etwa in so


repeat
repeat
set theResult to display dialog ¬
"Energie (kcal) pro 100g:" default answer "Integer oder Real"
set foo to text returned of theResult
try
set foo to foo as real
end try
if class of foo is real then
set Feld1 to foo
exit repeat
end if
end repeat
repeat
set theResult to display dialog ¬
"Fett (g) pro 100g:" default answer "Integer oder Real"
set foo to text returned of theResult
try
set foo to foo as real
end try
if class of foo is real then
set Feld2 to foo
exit repeat
end if
end repeat
repeat
set theResult to display dialog ¬
"Portionsgröße (g):" default answer "Integer oder Real"
set foo to text returned of theResult
try
set foo to foo as real
end try
if class of foo is real then
set Feld3 to foo
exit repeat
end if

end repeat
set ergebnis to ((Feld1 / 60) + (Feld2 / 9)) * (Feld3 / 100)
set ergebnis to (round (ergebnis * 10) rounding as taught in school) / 10
set ergebnis to ergebnis as string
set Feld1 to (round (Feld1))
set Feld3 to (round (Feld3))
display dialog ergebnis & " Points" & return & return & "Energie: " & tab & tab & tab & Feld1 & " kcal" & return & "Fett : " & tab & tab & tab & Feld2 & " g" & return & "Portionsgröße: " & tab & Feld3 & " g" buttons {"Fertig"} & {"Erneut berechen"} default button 2
if button returned of result = "Fertig" then exit repeat
end repeat
0
Nebu2k15.09.0622:37
Genial!
Eine Sache ist noch. Wenn man überhaupt nichts eingibt bekommt man eine Fehlermeldung aber das schaff ich schnell auszumurksen.
Vielen vielen Dank!!!
0
Nebu2k15.09.0622:43
So ist perfekt

repeat
repeat
set theResult to display dialog ¬
"Energie (kcal) pro 100g:" default answer ""
set foo to text returned of theResult
try
if foo is "" then set foo to "0"
set foo to foo as real
end try
if class of foo is real then
set Feld1 to foo
exit repeat
end if
end repeat
repeat
set theResult to display dialog ¬
"Fett (g) pro 100g:" default answer ""
set foo to text returned of theResult
try
if foo is "" then set foo to "0"
set foo to foo as real
end try
if class of foo is real then
set Feld2 to foo
exit repeat
end if
end repeat
repeat
set theResult to display dialog ¬
"Portionsgröße (g):" default answer "100"
set foo to text returned of theResult
try
if foo is "" then set foo to "0"
set foo to foo as real
end try
if class of foo is real then
set Feld3 to foo
exit repeat
end if

end repeat
set ergebnis to ((Feld1 / 60) + (Feld2 / 9)) * (Feld3 / 100)
set ergebnis to (round (ergebnis * 10) rounding as taught in school) / 10
set ergebnis to ergebnis as string
set Feld1 to (round (Feld1))
set Feld3 to (round (Feld3))
display dialog ergebnis & " Points" & return & return & "Energie: " & tab & tab & tab & Feld1 & " kcal" & return & "Fett : " & tab & tab & tab & Feld2 & " g" & return & "Portionsgröße: " & tab & Feld3 & " g" buttons {"Fertig"} & {"Erneut berechen"} default button 2
if button returned of result = "Fertig" then exit repeat
end repeat


*freu*
0
_mäuschen
_mäuschen17.09.0615:21

oder so ? 


0
Nebu2k18.09.0602:56
Danke mäuschen!!!
Durch dich lerne ich echt viel Applescript.
Habe erst am Donnerstag angefangen…
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.