Um zu testen, ob eine Eingabe eine Ganzzahl ist, habe ich jahrelang die klassische Umwandlung angewendet:
Von einem 'try wrapper' umgeben, ist diese Form recht zuverlässig. Aber nicht zu einhundert Prozent, weil
zum Beispiel "-7" keinen Fehler generiert.
Aus diesem Grunde ist es besser, eine kleine Wiederholungs-Schleife einzubauen, in welcher festgestellt
wird, ob sich jedes einzelne Zeichen in der Textkette "0123456789" befindet. Dies sieht kompliziert aus,
ist aber viel schneller als die Umwandlung mit 'as integer'.
Der "flag" 'okay' wird zu Beginn auf '1' gesetzt. Ist eines der Zeichen nicht zulässig, wird 'okay' auf
'0' gesetzt und mit 'exit repeat' die kleine Schleife verlassen. Im darauffolgenden Test wird der Wert
von 'okay' geprüft. Ist er '1', dann wird mit 'exit repeat die grosse Schleife verlassen. Ist er '0', dann
wird der Dialog gezeigt, welcher dem Anwender die Wahl lässt zwischen neuem Versuch oder Abbruch.
Der Test 'if nPages is not "" then' fängt leere Eingaben ab.
Die grosse Repeat-Schleife hat keine Abbruch-Bedingung. Aber die "Abbruch"-Buttons in jedem Dialog und
die beiden 'exit repeat' ermöglichen, den Ausstieg problemlos.
---
set nPages to 5
repeat
set okay to 1
set nPages to text returned of (display dialog "Wieviele Seiten einfügen?" default answer nPages)
if nPages is not "" then
repeat with i from 1 to count of nPages
if character i of nPages is not in "0123456789" then
set okay to 0
exit repeat
end if
end repeat
if okay = 1 then
set nPages to nPages as integer
if nPages < 2000 then
if nPages is not 0 then
exit repeat
else
display dialog "Spassvogel."
end if
else
display dialog "Ein XPress-Dokument kann nicht mehr als 2000 Seiten enthalten.
Deine Eingabe: " & nPages buttons {"Abbruch", "Neuer Versuch"} default button 2 with icon 0
end if
else
display dialog "Nur Ganzzahlen.
Deine Eingabe: " & nPages buttons {"Abbruch", "Neuer Versuch"} default button 2 with icon 2
end if
else
display dialog "Die Eingabe ist leer." & nPages buttons ¬
{"Abbruch", "Neuer Versuch"} default button 2 with icon 0
end if
end repeat
---
Erst wenn die Eingabe nur Ziffern enthält, wird die Textkette mit 'as integer' in eine Ganzzahl verwandelt.
Darauf folgt die Prüfung, ob der Wert höher als 1999 ist. Wenn dieser Code am Anfang eines Scripts steht,
welches ein Dokument erzeugt, dann reicht dies. Sonst müssen zuerst die vorhandenen Seiten gezählt und mit
berücksichtigt werden.
Hans Haesler, hsa@ringier.ch