免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: first_come
打印 上一主题 下一主题

CHAIN&SETLL什么时候通用? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-06-25 13:41 |只看该作者
PF

num   char
1        A
1        B
2        C
2        D
3        E
3        F

1   chain pf
可以等到   1   A这条记录
无论CHAIN 多少次不可能得到  1  B 这条记录
。。。。
1  setll    pf
1  reade pf
dow ...
...
1 reade  pf


1  chain  pf  (相当之前的setll + reade)
dow...
....
1   reade pf (如果用CHAIN的话就不能读取下一条,只能读取第一条,死循环)

论坛徽章:
0
12 [报告]
发表于 2010-06-25 15:51 |只看该作者
#10楼,很详细,很明了,谢谢.
setll +reade = chain,呵呵。很好的理解方式.
光标的位置这里是个问题,reade是顺序往下读么,怎么有人说这个是随机读取.不过运行时,好像是顺序读的,为什么说是随机读取(在别人说明ovrdbf,用block输出的时候说的),在block输出时不能用READE,因为它是随机读取??

论坛徽章:
0
13 [报告]
发表于 2010-08-23 14:16 |只看该作者
本帖最后由 first_come 于 2010-08-23 14:22 编辑

问题真的是要遇到了,才能真正理解,#11楼的话我明白了,那样写的确不行,是否是一直读第一条记录我就不清楚了.不过好像是reade一直在等待吧....不是死循环。当用reade时,前面不可以有read等等lock记录的操作.
我写过同样的程序,我先用setll来定位:
                  key        reade         file                   77
                                                 dou       *in77 = *on
                                             move .....
                                               update       file
                            key                 reade      file             77
                                               enddo
                   这样写出错了,改成:
                              dou           *in77 = *on
                            key                reade              file          77
                                          if       %eof
                                           leave
                                            endif
                                move......
                                           update        file
                                     enddo
就成功了。这里我不怎么理解为什么?第一种一运行就卡那里不动了,死循环?不明白.....

论坛徽章:
0
14 [报告]
发表于 2010-08-23 15:28 |只看该作者
你理解有问题,概念不清楚

如果你代码改成
doW      *in77 = *OFF
  你就不会死循环啦
DOU是先执行在判断,整个看起来逻辑有问题
第二个代码为什么不会死循环,因为你用的是%EOF
就是读到文件最后一条记录我管你读不读到,反正最后一条读完程序就退出

论坛徽章:
0
15 [报告]
发表于 2010-08-23 15:34 |只看该作者
你第一部分代码好诡异啊
读不到,当ON的时候你去MOVE UPDTAE?

论坛徽章:
0
16 [报告]
发表于 2010-08-23 16:14 |只看该作者
考虑的很不周全了,呵呵!当时想加个if   *in77 = *off的,你的dow更好.受教了....

论坛徽章:
0
17 [报告]
发表于 2011-08-12 10:49 |只看该作者
受教了,叁Q

论坛徽章:
0
18 [报告]
发表于 2011-08-12 12:01 |只看该作者
区别很简单,chain  之后,记录已经读出。
setll只负责定位,不读记录,通常配合reade使用。

论坛徽章:
0
19 [报告]
发表于 2011-08-18 17:03 |只看该作者
--》 SETLL
记录

--》记录 CHAIN

论坛徽章:
0
20 [报告]
发表于 2011-08-19 12:14 |只看该作者
我想说说我的看法吧:
1.当你使用chain的时候呢,首先指针会被置顶,然后查找你指定的key or Key list.若查到为*OFF,查不到为*ON
2.当你使用setll的时候呢,setll会根据你所指定的key or Key list 去查找记录,找到记录时,将指针放在该记录的上面(记录与记录之间的间隔),然后当你使用read的时候,就可以读到该记录了.
若想查找多条有相同key的record的话,可以使用reade.
以上是老衲的理解,不对之处,还请各位大侠多多指教~!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP