Chinaunix

标题: 今天看到一RPGIV处理数据的好题,不知各位将如何解答和解释这几条常见的指令 [打印本页]

作者: fengyunzi    时间: 2008-11-28 10:38
标题: 今天看到一RPGIV处理数据的好题,不知各位将如何解答和解释这几条常见的指令
今天看到一RPGIV处理数据的题目,不知各位将如何解答和解释这几条常见的指令?

试就以下数据,练习这些指令来解决这四个Question


1.先解以下7行常见容易搞混淆的取数指令的区别和各自用法?

IFEQ  XXX  ENDIF
IFEQ  XXX  ELSE  XXX  ENDIF
SETLL
READ
READE
CHAIN
DOWEQ  XXX  ENDDO




2.再解Question

1) Find the total amount of all item
2) Find the amount of item A
3) Find the total amount of item which greater than 100
4) Find the total amount of item type FR

Data
Item#        Item type        Amount
A        FR                100
B        FR                200
C        FG                700
D        PA                50


高手的你们快行动起来,说出你的解题思路和意思。
以上指令很易混淆,请用你的理解来说明。。。。


谢谢!!!!

[ 本帖最后由 fengyunzi 于 2008-12-3 22:02 编辑 ]
作者: fengyunzi    时间: 2008-11-28 10:39
以下七行RPGIV常用取数指令(极易混淆和用错的指令)的区别和各自通常用法及含义?
IFEQ  XXX  ENDIF
IFEQ  XXX  ELSE  XXX  ENDIF
SETLL
READ
READE
CHAIN
DOWEQ  XXX  ENDDO

[ 本帖最后由 fengyunzi 于 2008-11-28 11:02 编辑 ]
作者: fengyunzi    时间: 2008-11-28 10:53
测试下你对RPGIV 特别是total数据处理的能力。。。。。
作者: fairyboy    时间: 2008-11-28 10:56
KEY是?
作者: fengyunzi    时间: 2008-11-28 11:08
不用KEY的

这个问题,分成两部分来解答,详解以上问题描述

高手的你们快行动起来,说出你的解题思路和意思。
以上指令很易混淆,请用你的理解来说明。。。。


谢谢!!!!
作者: fengyunzi    时间: 2008-11-28 11:16
别小看这几个指令,平常我们天天用,觉得太简单了,如果让我们用术语来概括他的意思 用法 区别,那又不是很容易说出来的
作者: fengyunzi    时间: 2008-11-30 20:54
怎么没有兄弟们的跟帖....
期待中


谢谢
作者: fengyunzi    时间: 2008-11-30 22:15
passthru  22:07:35
1) Find the total amount of all item
   mTotal = 0;
   dow not eof();
      read rd;
      mTotal = mTotal + Amount;
   enddo;
2) Find the amount of item A
     假设Item#为lf的key:
     mKey = 'A';
     mTotal =0;
     chain mKey rd;
     if found;
        mTotal = Amount;
     endif;
3) Find the total amount of item which greater than 100
    处理(一):在lf中或query file过滤掉amount小于等于100的记录;
    处理(二);
   mTotal = 0;
   dow not eof();
      read rd;
      if amount <=100;
         iter;
      endif;
      mTotal = mTotal + Amount;
   enddo;
4) Find the total amount of item type FR
处理方法如题2,只是替换lf和key值的选项。

[ 本帖最后由 fengyunzi 于 2008-11-30 22:16 编辑 ]
作者: 大敌人    时间: 2008-11-30 23:11
标题: 回复 #1 fengyunzi 的帖子
没有设关键字的话,就建个逻辑文件,然后对逻辑文件进行操作。否则setll chain reade read 等都不能用,

另外,setll 设文件指针,它会指向文件或者字段(如果你写了的话)的最上层,然后顺序读下去。

我现在有个疑问,setll fieldname pf; reade filedname pf ;  注意,这个filedname是pf表中不存在的名字(我随便起的),但是却能读到最后一条记录,为什么??

[ 本帖最后由 大敌人 于 2008-12-1 09:20 编辑 ]
作者: fengyunzi    时间: 2008-12-03 14:14
1.先解以下7行常见容易搞混淆的取数指令的区别和各自用法?

IFEQ  XXX  ENDIF条件判断、满足条件则执行相关语句

IFEQ  XXX  ELSE  XXX  ENDIF条件分支判断,满足条件,则执行相关语句,不满足,则执行另外的语句。。。。多一个ELSE会多一个不满足条件,执行另外程序的

SETLL 设置低界,把条件定位到键字相对的记录号,大于或者等于因子1中说明的检索自变量的下一条记录 一般和*LOVAL连用从最初的那行数据开始读起

Leave 操作把控制从DO组转给ENDDO操作后的语句。它是跳出DO循环的意思,会执行DO之后的语句,leave一般是用在用在DO、DOU、DOUxx或者DOWxx循环中,不能在DO组外部使用

READ 读一个记录,无比较.read无比较的意思是其前面无比较因子(变数)

READE 读等于键字的记录,有比较.reade前面会有个做比较的因子(变数,检索自变量)


CHAIN从文件中随机检索,chain与read虽同样是读档案找要检索的数据,但是chain用指标读时只会找一行(指标的进度:从什么地方开始读这个档案),read可找多行,如Q2的问题只需读一行数据时就可以用chain。如想确认到底是用read读还是用chain的话可先确定指标是从哪一行开始读,chain只会读一行,read可以读很多行

DOWEQ  XXX  ENDDO 执行一组满足给定条件的操作(看条件跑多次),和read相比,他可跑多次,read只能读一次

[ 本帖最后由 fengyunzi 于 2008-12-3 21:55 编辑 ]
作者: fengyunzi    时间: 2008-12-03 22:01
2.再解Question
1) Find the total amount of all item
2) Find the amount of item A
3) Find the total amount of item which greater than 100
4) Find the total amount of item type FR

Data
Item#        Item type        Amount

A        FR                100
B        FR                200
C        FG                700
D        PA                50


解答方法:
1)
Read Itemtypefile     90
*in90 DOWEQ*OFF
AddRamount AmountTotal
Read  Itemtypefile     90  
Enddo

2)keyItemA ChainiItemtypefile
*in90    IFEQ*OFF
      Z-ADDamount @TotalAmt       
           ENDIF


3)Read itemtypefile 91  
*in91 DOWEQ*OFF
IF Amount GE'100'
ADDAmount @TotalAmt
ENDIF
Read  itemtypefile 91
ENDDO
这里应用ADD累加,需把所有大于100的amount累加@totalAmt.程序会读多次大于100的amount。而Q2只会有一个ItemA通过KeyItemA chainXXX筛选检索出来的ItemA的amount,只有一笔数,是不需要累加,故用Z-ADD.

4)
keyFR ReadeItemtypefile 92     /*KeyFR是搜寻查找ItemType这个栏位中的FR 然后按之排序/

*in92 DOWEQ*OFF

      ADDamount @TotalAmt        /*把上面查找出的ItemTYPe栏位中的FR的amount进行累加*/
       
KeyFR  Reade itemtypefile 92

       ENDDO

这里应是ADD,因是用KEY reade读出的keyType中的FR的金额,是需读多次的,是需把读多次读出的FR的金额进行累加 才会有FR 的@TotalAmt。和Q2中用chain筛选检索出的keyItemA的金额不一样(ItemA的金额chain检索出后的ItemA的amount只有一笔,而这里检索出来的FR的amount有两笔)
作者: fusl520    时间: 2008-12-18 09:13
以上条件语句及关键指令都用的比较多,虽然有时对CHAIN,SETLL用的有点糊涂

谢谢楼主解析.
作者: fengyunzi    时间: 2008-12-23 21:53
客气
fusl520 兄弟

有空来我群来论坛多多交流交流。。。。

共同学习和进步撒
对了,最近很少看到轻舟兄弟伟岸的身影了 哈




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2