Skip to main content

Ending Focused $Order Loops

Now let's focus the end of the loop. Again, assume the variable substring holds the non-empty substring. Then the following statement: quit:($extract(ln, 1, $length(substring)) '= substring) means: “Quit if the beginning of ln doesn't match substring”. It also handles the case where $Order reaches the end of the names, where ln = "". That's because, if ln is the empty string, $Extract of ln is the empty string, and since substring isn't empty, the Quit happens and the loop ends.

VS Code - ObjectScript

Class ObjectScript.Examples
{

/// loop through last names that MATCH substring
ClassMethod FocusedLoopStartEnd()
{
    read "Search for: ",substring
    // find the last name just BEFORE the substring and then start looping
    set ln = $order(^PersonI("Name", substring), -1)
    for {
        set ln = $order(^PersonI("Name", ln))
        // quit if no match or at end
        quit:($extract(ln, 1, $length(substring)) '= substring)
        write !, ln
    }
}
}
Testing using the Terminal


USER>do ##class(ObjectScript.Examples).FocusedLoopStartEnd()
Search for: A
Agee
USER>do ##class(ObjectScript.Examples).FocusedLoopStartEnd()
Search for: Jo
Jones
USER>do ##class(ObjectScript.Examples).FocusedLoopStartEnd()
Search for: Jones
Jones
USER>do ##class(ObjectScript.Examples).FocusedLoopStartEnd()
Search for: Ju
USER>do ##class(ObjectScript.Examples).FocusedLoopStartEnd()
Search for: Sw
Swoboda
USER>
Feedback