$Order ループの開始
ここでは、ループの開始について学習します。変数 sub は、空でない 部分文字列を格納すると想定します。前の例では ln を "" に設定しましたが、今度は、部分文字列に基づく $Order ループが開始されるようにします。しかし、ln を部分文字列に単純に設定することはできません。sub に一致する姓がデータベースに既に存在する場合、どうなるでしょうか。このような場合、ループは次の名前から開始されます。これは、初期 $Order が原因で、インデックスに sub と完全に一致する名前が存在しても同様です。
対処法として、$Order を一度逆の順序で使用して、ln を、sub の前にある姓に設定します。それにより、後続の名前からループを開始し、名前を生成できます。しかし、ループの終了に焦点を置いて、“Swoboda” の値を取得しないようにする必要があります。
SAMPLES>do ^loopstart
Search for: J
Jones
Swoboda
SAMPLES>
以下は、loopstart.mac コードです。
loopstart ; loop through last names
read "Search for: ",sub
set ln = $order( ^PersonI("Name", sub), -1)
for {
set ln = $order( ^PersonI("Name", ln) )
quit:(ln = "")
write !, ln
}