*--遍历算法是递归算法的一个具体应用实例,在程式设计中也是比较常用的算法之一
*这里介绍几个常用的应用实例来简单接触下遍历算法的基础应用:
*--1、遍历文件 dqml='C:' &&需扫描的盘符 Use Create Cursor mylsdbf (wjmc c(120),wjcd N(10),wjrq d,wjshj c(10),wjsx c(6)) xGS=1 xCD=0 Append Blank Replace wjmc With dqml Do While !Eof() nRecn=Recno() dqml=Alltrim(wjmc)+'/' x=Adir(Mysz,(dqml+'*.*'),'rashd') If x<>0 For I=3 To x Mysz(I,1)=dqml+Mysz(I,1) xGS=xGS+1 xCD=xCD+Mysz(I,2) Endfor Append From Array Mysz For Alltrim(wjmc)<>'.' And Alltrim(wjmc)<>'..' And 'D'$wjsx Endif Go nRecn Skip Enddo Browse Use
*--2、遍历控件 Create Cursor kjsl(kjname C(254)) Insert Into kjsl(kjname) Values('thisform') Do While !Eof() nRECN=Recno() kjmc=Alltrim(kjname) =Amembers(aval,&kjmc,2) If Type('aval')<>'U' For Each cval In aval&&aval控件名称数组,cval数组值 Insert Into kjsl(kjname) Values(kjmc+'.'+cval) Endfor Endif Release aval Go nRECN Skip Enddo Browse *--3、遍历TreeView 中指定节点及其所有子节点的算法 ** aChild[1,3]是一个自定义表单数组属性 Lparameters cnode ** 将所有的子节点的特性都放到表单的数组属性 aChild 中去 ** 以便在要删除一个节点的时候,删除所有子节点的数据 Local oCurNode, nArrayCount nArrayCount = 1 oCurNode = cnode && 纪录下第一个子节点的特性 This.aChild[1,1] = oCurnode.Key This.aChild[1,2] = oCurnode.Text This.aChild[1,3] = oCurnode.Index Do While oCurNode.Children > 0 oCurNode = oCurNode.Child If oCurNode.Children > 0 && 深入到最后一层 Loop Endif Do While .T. If oCurNode.Key = cNode.Key Exit Endif nArrayCount = nArrayCount + 1 If Isnull(oCurNode.Next) && 如果当前节点之后没有节点了 Dimension This.aChild[nArrayCount, 3] && 纪录当前节点的信息 This.aChild[nArrayCount, 1] = oCurNode.Key This.aChild[nArrayCount, 2] = oCurNode.Text This.aChild[nArrayCount, 3] = oCurNode.Index If !(oCurNode.Key = cnode.Key) && 如果当前节点已经是最高节点了,则立刻退出 oCurNode = oCurNode.Parent && 否则,后退一层,并重新开始循环 Loop Else Exit Endif Else && 当前节点之后还有节点,检查后续的节点 oCurNode = oCurnode.Next && 将下一个节点设为当前节点 Dimension This.aChild[nArrayCount,3] && 纪录该节点的特性 This.aChild[nArrayCount,1] = oCurnode.Key This.aChild[nArrayCount,2] = oCurnode.Text This.aChild[nArrayCount,3] = oCurnode.Index If oCurNode.Children > 0 && 如果该节点有子节点,则退出,返回到第一个循环 Exit Endif Endif If oCurNode.Children > 0 Exit Endif Enddo If oCurNode.Key = cNode.Key Exit Endif Enddo
|