repeat with {loop variable} from {integer} to {integer}[by stepVal] end [repeat] |
|
Syntax
Repeat with loopVar from 1 to 10
(* code statements *)
end repeat
Description
This form of the repeat loop executes a specified
number of times over a range of values. A loop variable keeps track
of how far the repeat loop has progressed in
cycling over its range of loops. The loop variable increments by the
value of stepVal (or one by default if the
stepVal variable is not specified) throughout each
loop. This makes the repeat with statement much
more flexible and powerful than repeat {integer}
times. You can take the value of the loop variable and use
it in the executing code, as in the following example. Once this
repeat with statement reaches the end of its
range, as in:
repeat with loopVar from 1 to 10
(10 is the end of the range here), then the repeat
loop terminates and code execution resumes with the statement
following end repeat. You can also use the
exit statement to terminate this loop (see
"exit"). repeat
with is similar to the famous:
for (i=0; i < rangeVar; i++)
variation of the loop statement that JavaScript, Java, and C++
programmers are very familiar with.
Examples
This AppleScript loops through each character of a word to see if any
character is repeated. It uses the loop variable to determine which
character in the word to examine. This example also shows how you can
specify any of the range values with expressions that return
integers, instead of just literal integers:
repeat with loopVar from 2 to (2^2)
set theString to the text returned of (display dialog¬
"Enter a word and I'll tell you which letter, if any, repeats first"¬
default answer "")
set len to (length of theString) (* len is set to the number of
characters in string *)
tell application "BBEdit 5.0"
repeat with loopVar from 1 to len (* repeat from char 1 to length
of string *)
if loopVar is equal to 1 then set charList to {} (*create a list
to hold the examined characters *)
set tempChar to (character loopVar of theString) (* tempChar is a
single character in the string like 'o' *)
if tempChar is in charList then (* if it's already in the list
then it appears more than once in the string *)
display dialog "Your repeating character is " & tempChar
exit repeat (* exits the repeat loop; finishes executing the
script *)
end if
set charList to charList & tempChar (* no repeating chars yet so
add the current char to the list *)
if loopVar is equal to len then (* if this is true then we did not
find any repeaters *)
display dialog "You had no repeating characters!"
end if
end repeat
end tell
end repeat
This script uses the BBEdit text editor because this app is good at
examining text. The script gets a word from the user using the
display dialog scripting addition (Part IV of
the book discusses scripting additions). Then it uses a
repeat with loop to get each single character in
the string and store it in a variable of type
list (i.e., charList). This is
how the script keeps track of the characters it has already examined.
The loopVar of the repeat with
statement identifies individual characters of the
string with an index reference form, as in
character loopVar. If
loopVar were 3 then the expression would evaluate
to character 3, which is the
third character in the string. The code then
checks the charList list of
characters to see if the currently examined character is already in
there. If the character is already in the list
then it appears more than once in the string. Then
the script tells the user which character repeated and exits the
loop:
display dialog "Your repeating character is " & tempChar
This example shows this repeat with loop with a
specified step value:
set theString to "Kindly give me every other word."
set allWd to words of theString -- returns list of words
set len to length of allWd
set userMsg to ""
repeat with indx from 1 to len by 2 -- repeat loops over the list by two
set userMsg to userMsg & return & (item indx of allWd)
end repeat
display dialog "Here's every other word on its own line: " & return &¬ userMsg
|