遍历算法在VFP中的简单应用

*--遍历算法是递归算法的一个具体应用实例,在程式设计中也是比较常用的算法之一


*这里介绍几个常用的应用实例来简单接触下遍历算法的基础应用:


*--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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值