免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4354 | 回复: 12
打印 上一主题 下一主题

SETLL和READE联用,但两个键值不同怎么理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-17 14:57 |只看该作者 |倒序浏览
举个简单的例子

F  STU          IF   E      K   DISK

表STU的键字

K_STU1          KLIST
               KFLD        A
                       KFLD        B  


K_STU2          KLIST
                      KFLD        A
                      KFLD        B
                      KFLD        C

A、B、C都是有值的,如:A=1 B=2 C=3
k_stu2    setll         str
k_stu1    reade      str
               dow      not % eof

我想问的是,setll是只有定位的功能嘛?是否有排序的功能,如果没有排序功能用上述这种方法,READE能读到第一条符合K_STU2的键字,
那如果第二条不是K_STU2的键字,是读得什么。读得是C小于3的值,还是大于3的值。

论坛徽章:
0
2 [报告]
发表于 2011-11-17 16:14 |只看该作者
1、Setll 不能对表中的数据排序,要对中的数据排序,需要用表中的 Key。
2、k_stu2    setll         stu
     k_stu1    reade      stu

     这两行中的 k_stu2 和 k_stu1 调换一下或者两个都使用 K_STU2 更合适。这样就可以读到第一条 K_STU2 的记录。

论坛徽章:
0
3 [报告]
发表于 2011-11-17 16:17 |只看该作者
1.STELL 没有排序的功能;
2.按照上述例子, 如果表中有符合K_STU2的记录(即:1 2 3),READE 就能读到第一条"符合K_STU2的键字"的记录;
3.读的是C大于3的值;

例如: 表中记录如下: 
A B C 
1 1 0
1 1 1
1 2 0
1 2 1
1 2 3
1 2 4
1 3 1

那么, 按照上述方法,SETLL 后指针应该指在1 2 3 记录前面(如果表中有1 2 3记录, 没有的话, 指针指在1 2 4 前面)
1.接着READE的话, 就读到的是1 2 3;
2.再继续读第二笔记录,就是1 2 4, 就是C大于3的值;
3.再继续reade, 如果表中没有符合k_stu1的记录,就读不到了; 就像例子中的1 3 1,  是读不出来的.

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
4 [报告]
发表于 2011-11-17 18:35 |只看该作者
我来解释一哈
按照你上面的例子
A B C 
1 1 0
1 1 1
1 2 0
1 2 1
1 2 3
1 2 4
1 3 1

k_stu1 进行SETLL那么表示游标定位在
1 1 1
这个记录之前
当你用
k_stu2进行
READE的时候 当然读到的是
1 2  3
SETLL只是一个定位游标或者是记录的位置,没有进行数据读取。
你上面的是错的哈
这个例子只能读到一笔
1 2 3
就结束了。

论坛徽章:
0
5 [报告]
发表于 2011-11-17 23:12 |只看该作者
读完 1 2 3  还能读到 1 2 4 的

论坛徽章:
0
6 [报告]
发表于 2011-11-17 23:26 |只看该作者
本帖最后由 vicky___lee 于 2011-11-17 23:51 编辑

回复 5# ChristopherCh

    5楼正解。 按照楼主最初的例子: 应该是可以读到 1 2 4的。

    K_STU1          KLIST
                            KFLD        A
                            KFLD        B  

      K_STU2         KLIST
                           KFLD        A
                           KFLD        B
                           KFLD        C


    A、B、C都是有值的,如:A=1 B=2 C=3
    k_stu2    setll         str
     k_stu1    reade      str

论坛徽章:
0
7 [报告]
发表于 2011-11-18 10:45 |只看该作者
sell 定位指针,readE读相等键值的记录。楼上都说的没错

论坛徽章:
0
8 [报告]
发表于 2011-11-18 13:15 |只看该作者
假设升序 ,且有多个键值
有5笔数据,如下排列
1    1    3
1    2    2
1    2    3
1    2    4
1    3    3
k_stu2    setll         str
此时游标定位在 第二笔与第三笔中间
k_stu1    reade      str
往下读符合 k_stu1 的资料,第三笔符合,第四笔符合,第五笔就不符合了

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
9 [报告]
发表于 2011-11-18 17:53 |只看该作者
才发现,我原来看错了~
如果是那样的话,是可以读到的。

论坛徽章:
0
10 [报告]
发表于 2011-11-20 00:34 |只看该作者
有意思,我今天写了篇关于控制文件游标的博文,楼主可以参考下。3楼分析的对,4楼分析的错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP