$Order ループの終了
ここでは、ループの終了方法について学習します。ここで再度、変数 sub には空文字以外の部分文字列が設定されているとします。ここで、(quit:$extract(ln,1,$length(sub))'=sub) と記述し、“ln の先頭が sub に一致しない場合ループを Quit します”。また、ln = "" がある名前の最後に $Order がアクセスする場合も処理します。つまり、ln が空文字列の場合は ln の $Extract が空文字列で、sub は空文字列でないため、Quit が発生し、ループが終了します。以下にいくつか例を挙げます。
SAMPLES>set sub = "J"
SAMPLES>set ln = "Jones"
SAMPLES>if $extract(ln, 1, $length(sub)) '= sub { write "No Match" }
SAMPLES>set sub = "J"
SAMPLES>set ln = "Swoboda"
SAMPLES>if $extract(ln, 1, $length(sub)) '= sub { write "No Match" }
No Match
SAMPLES>set sub = "J"
SAMPLES>set ln = ""
SAMPLES>if $extract(ln, 1, $length(sub)) '= sub { write "No Match" }
No Match
SAMPLES>do ^loopend
Search for: J
Jones
SAMPLES>
終了したループ (loopend.mac) のコードは以下のとおりです。
loopend ; loop through last names
read "Search for: ",sub
set ln = $order( ^PersonI("Name", sub), -1)
for {
set ln = $order( ^PersonI("Name", ln) )
quit:( $extract(ln, 1, $length(sub)) '= sub )
write !, ln
}