NewBie's Corner Session 28 Various Methods to Traverse a Global
NewBie's Corner Session 28 Various Methods to Traverse a Global
Welcome to NewBie's Corner, a weekly or biweekly post covering basic Caché Material.
Judging from the number of responses to Session 27 Traversing A Global, developers are passionate about their methods. I am not here to judge the merit of the various methods.
Over the next few pages I will demonstrate a number of methods to Traverse a Global. If you don't already have a favorite they may help you pick one.
I will repeat the method from Session 27 just to have all methods in one post.
There may be variations on these methods and perhaps methods I am not aware of. Feel free to chime in and express your opinion, that is how we all learn.
If you use Caché Objects and Methods with Caché SQL you should never have to worry about traversing a Global, that is the best to my way of thinking.
Start()
Kill ^Trans
Set ^Trans("Cars","Chevy","Malibu")="4 Speed"
Set ^Trans("Cars","Ford","Fairlane")="Cheap"
Set ^Trans("Cars","Ford","Mustang")="Fast"
Set ^Trans("Cars","Toyota","Camery")="Nice"
Set ^Trans("Cars","Toyota","Tercel")="Not as Nice"
;ZW ^Trans
Use 0
Write !!,"******************************"
Write !,"Method: For Structure"
Write !,"******************************"
Set Sub1="" For {
Set Sub1=$O(^Trans(Sub1)) Q:Sub1=""
Write !,"Sub1: ",Sub1
Set Sub2="" For {
Set Sub2=$O(^Trans(Sub1,Sub2)) Q:Sub2=""
Write !," ==> Sub2: ",Sub2
Set Sub3="" For {
Set Sub3=$O(^Trans(Sub1,Sub2,Sub3)) Q:Sub3=""
Write !," ====> Sub3: ",Sub3
Set Data=(^Trans(Sub1,Sub2,Sub3))
Write !," ======>"," Data: ",Data,!
}
}
}
Write !!,"******************************"
Write !,"Method: For Do Dots"
Write !,"******************************"
Set Sub1="" For Do Q:Sub1=""
. Set Sub1=$O(^Trans(Sub1)) Q:Sub1=""
. Write !,"Sub1: ",Sub1
. Set Sub2="" For Do Q:Sub2=""
. . Set Sub2=$O(^Trans(Sub1,Sub2)) Q:Sub2=""
. . Write !," ==> Sub2: ",Sub2
. . Set Sub3="" For Do Q:Sub3=""
. . . Set Sub3=$O(^Trans(Sub1,Sub2,Sub3)) Q:Sub3=""
. . . Write !," ====> Sub3: ",Sub3
. . . Set Data=(^Trans(Sub1,Sub2,Sub3))
. . . Write !," ======>"," Data: ",Data,!
Write !!,"******************************"
Write !,"Method: Do While"
Write !,"******************************"
Set Sub1=""
Do {
Set Sub1=$O(^Trans(Sub1)) Q:Sub1=""
Write !,"Sub1: ",Sub1
Set Sub2=""
Do {
Set Sub2=$O(^Trans(Sub1,Sub2)) Q:Sub2=""
Write !," ==> Sub2: ",Sub2
Set Sub3=""
Do {
Set Sub3=$O(^Trans(Sub1,Sub2,Sub3)) Q:Sub3=""
Write !," ====> Sub3: ",Sub3
Set Data=(^Trans(Sub1,Sub2,Sub3))
Write !," ======>"," Data: ",Data,!
} While Sub3'=""
} While Sub2'=""
} While Sub1'=""
Write !!,"******************************"
Write !,"Method: While"
Write !,"******************************"
Set Sub1=""
Set Sub1=$O(^Trans(Sub1))
While Sub1'="" {
Write !,"Sub1: ",Sub1
Set Sub2=""
Set Sub2=$O(^Trans(Sub1,Sub2)) Q:Sub2=""
While Sub2'="" {
Write !," ==> Sub2: ",Sub2
Set Sub3=""
Set Sub3=$O(^Trans(Sub1,Sub2,Sub3)) Q:Sub3=""
While Sub3'="" {
Write !," ====> Sub3: ",Sub3
Set Data=(^Trans(Sub1,Sub2,Sub3))
Write !," ======>"," Data: ",Data,!
Set Sub3=$O(^Trans(Sub1,Sub2,Sub3)) Q:Sub3=""
}
Set Sub2=$O(^Trans(Sub1,Sub2)) Q:Sub2=""
}
Set Sub1=$O(^Trans(Sub1))
}
Write !!,"******************************"
Write !,"Method: Levels"
Write !,"******************************"
Set Sub1=""
Level1
Set Sub1=$O(^Trans(Sub1))
If Sub1="" GoTo EndLevels
Write !,"Sub1: ",Sub1
Set Sub2="" Goto Level2
Goto Level1
Level2
Set Sub2=$O(^Trans(Sub1,Sub2))
If Sub2="" Goto Level1
Write !," ==> Sub2: ",Sub2
Set Sub3="" Goto Level3 Q:Sub3=""
Goto Level2
Level3
Set Sub3=$O(^Trans(Sub1,Sub2,Sub3))
If Sub3="" Goto Level2
Write !," ====> Sub3: ",Sub3
Set Data=(^Trans(Sub1,Sub2,Sub3))
Write !," ======>"," Data: ",Data,!
Goto Level3
EndLevels
Write !!,"******************************"
Write !,"Method: One Line"
Write !,"******************************"
Set Sub1="" For Set Sub1=$O(^Trans(Sub1)) Q:Sub1="" Write !,"Sub1: ",Sub1 Set Sub2="" For Set Sub2=$O(^Trans(Sub1,Sub2)) Q:Sub2="" Write !," ==> Sub2: ",Sub2 Set Sub3="" For Set Sub3=$O(^Trans(Sub1,Sub2,Sub3)) Q:Sub3="" Write !," ====> Sub3: ",Sub3 Set Data=(^Trans(Sub1,Sub2,Sub3)) Write !," ======>"," Data: ",Data,!
--Mike Kadow
If you have a comment, please respond through the InterSystems Developer Community, don't send me private email, unless of course you wish to address me only.