免费注册 查看新帖 |

Chinaunix

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

ILE RPG4 C表常用操作码学习笔记(按字母顺序发) [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-06-10 17:52 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

支持!
楼主的E文很好啊!

论坛徽章:
0
22 [报告]
发表于 2005-06-10 19:12 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

好贴,顶!

论坛徽章:
0
23 [报告]
发表于 2005-06-10 20:32 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

赶紧贴除法,取整

论坛徽章:
0
24 [报告]
发表于 2005-06-12 18:57 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

好帖,支持!

论坛徽章:
0
25 [报告]
发表于 2005-06-12 19:37 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

强.怎么不置顶啊.

论坛徽章:
0
26 [报告]
发表于 2005-06-12 20:11 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

好、置顶,等待楼主补充完成。。。

论坛徽章:
0
27 [报告]
发表于 2005-06-13 11:08 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

哎呀,我一天没来就给我顶上去了,这要更加努力了啊,谢谢大家的支持啊,谢谢了啊!!!!

论坛徽章:
0
28 [报告]
发表于 2005-06-13 11:11 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

COMMIT(委托)

                操作码                因子1                因子2                结果字段                  指示器
                COMMIT        分介                                                                -  ER  -

        从前面COMMIT或FOLLBACK操作以来(如前面没有COMMIT或ROLBK操作,就从委托控制开始),对在输出操作中规定的以委托控制打开的文件做全部的修改。可在文件规范表指定COMMIT键字,说明文件以委托控制打开。
        在委托控制下,释放文件的所有记录锁。
    文件修改和释放记录锁适合于委托控制下的所有文件,不管程序是否发出COMMIT操作控制,或者通过同一活动组的其他程序或作业,都取决于STRCMTCTL命令中指定的委托范围。发出COMMIT操作的程序不需要有任何在委托控制下的文件。
    当执行CL命令STRCMTCTL时,开始启动委托控制。详细信息见ILE RPG/400程序员指南中“委托控制”的章节。
    用因子1,可以指定一个常量或变量(除了指针之外的类型),它指出用COMMIT做修改和随后修改之间的边界。如果因子1为空格,则标识符是零。
    73和74列上的可选指示器,在操作不成功时置为ON。例如,如果委托控制无效时该指示器置为ON。

DELETE(删除记录)       

                操作码                因子1                因子2                结果字段                  指示器
                DELETE                检索自变量        文件名                                        NR  ER  -

    DELETE操作从一个数据库文件中删除一个记录。该文件必须是一个更新文件(文件描述规范表的17列上用U标识)。删除过的记录不能再找到。
    如果没有指定因子1,DELETE操作删除当前记录(最后检索到的记录)。记录必须由前一个输入操作(例如,CHAIN或READ)加锁。
    因子1是检索自变量,它可以是键字或相对记录号,指出要删除的记录。如果用键字访问,因子1可以是一个字段名、一个命名常量或一个文字。另外,对外部描述文件可在因子1上说明一个KLIST名。如果对某键字有相同记录,仅从文件中删除第一条记录。如果用相关记录号访问,因子1必须是一个不带小数位的数字型常量或变量。
    因子2是要删除的记录所在的更新文件名或记录格式名。记录格式名仅对外部描述文件有效。如果没有规定因子1,记录格式名必须是从文件读的最后一个记录的名,否则将产生错误。
    如果规定了因子1,则必须在71和72列指定一个结果指示器。如果没有规定因子1,则保留71和72列为空格。如果在文件中找到要删除的记录,此指示器置为ON。可以在73和74列上说明一个结果指示器;如果DELETE操作不成功将其置为ON(例如,用户没有权力在文件上删除记录)。75和76列上保留空格。
    在OS/400操作系统下,如果对因子2规定的文件成功的执行了DELETE操作,之后又对此文件执行一个读操作,将读出被删除记录后的下一条记录。

  DIV(除法)

                操作码                因子1                因子2                结果字段                  指示器
                DIV(H)        被除数                除数                   商                +  -  Z

    如果说明了因子1,DIV操作使因子1被因子2除,否则,用结果字段被因子2除。商(结果)放在结果字段中。如果因子1是0,除的结果也是0。因子2不能是0,如果是0,则出现错误,RPGⅣ异常/错误处理例程接收控制。如果没有说明因子1,结果字段(被除数)被因子2(除数)除,而结果(商)放于结果字段中。因子1和因子2必须是数字,也可以是:一个数组、数组元素、字段、象征常量、文字、命令常量、子字段或表名。
    除非除法操作后做一个传送余数(MVR)操作,否则除法操作的余数将会丢失。如果用条件指示器,必须确保在DIV操作之后应即执行MVR。如果在DIV操作之前执行了MVR操作,则出现不可预料的结果。如果传送余数是下一个操作,除法操作的结果就不能被取舍(四舍五入)。
    关于DIV操作的规则,见4.3.1的“算术操作”。
    在4.3.1中的图100,举例说明了DIV操作。

论坛徽章:
0
29 [报告]
发表于 2005-06-13 15:42 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

DO(do)

                操作码                因子1                因子2                结果字段                指示器
                DO                        开始值                界限值                索引值

    DO开始一组操作,并且指出做这组操作的次数。要规定次数,通过说明一个索引字段,一个开始值和一个界限值。ENDDO语句放在该组的末尾。关于DO组的详细资料,见4.4.19“结构程序设计操作”。
    在因子1中规定没有小数的起始值,这个值可以是一个数字文字、命名常量或字段名。如果不说明因子1,初值为1。
    在因子2上规定没有小数的界限值,它可以是一个数字型字段名、文字或命名常量。如果不说明因子2,界限值为1。
    在结果字段说明一个有当前索引值的数字型字段名。结果字段必须是足够长,能容纳下界限值加上它的增量。如果不说明索引字段,则内部使用。当DO操作开始时,索引字段的值都用因子1来代替。
    在相应的ENDDO操作的因子2上指出将要加在索引字段上的增量,它可以是一个数字文字或没有小数位的数字字段。如果它是空格,则增量值为1。
    另外,对DO操作本身,在DO和ENDDO语句上的条件指示器控制该DO组。DO语句上的条件指示器控制是否开始DO操作,这些指示器仅在DO循环开始时检测一次。相应的ENDDO语句上的条件指示器控制该DO组是否重复进行。这些指示器在每个循环结束时被检测。
    DO操作分以下步来执行:
        1、如果DO语句行上的指示器满足了,执行DO操作(第2步)。如果没有满足,执行相应的ENDDO语句之后的可执行操作(第7步)。
        2、当开始DO操作时,把初值(因子1)传送到索引字段(结果字段)。
        3、如果索引值大于界限值,执行相应的ENDDO语句后边的计算操作(第7步)。否则,执行DO语句后的第一个操作(第4步)。
        4、执行DO组中的每个操作。
        5、如果ENDDO语句上的条件指示器不满足,执行相应的ENDDO语句后的计算操作(第7步)。否则执行ENDDO操作(第6步)。
        6、通过把增量加到索引字段来执行ENDDO操作。执行第3步。(注意当执行第3步时,不再检测DO语句上的条件指示器(第1步))。
        7、当DO或ENDDO语句上的条件指示器不满足时,执行ENDDO语句后面的语句(第1步或第5步),或者当索引值大于界限值时(第3步)也做这步。
    当使用DO操作时注意以下几点:       
        ·可以在循环内修改索引、增量、界限值及指示器,从而影响DO组的结束。
        ·一个DO组不能跨越明细和总计计算。
    关于这些操作如何影响DO操作的信息请参阅“LEAVE(离开do组)”和“ITER(重复)。
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  当指示器17为ON时,DO组执行10次,当在字段X(结果字段)中
      C*  的下标值大于因子2中的值(10)时,停止运行。当DO组停止运行,
      C*  控制转给紧接ENDDO后的操作。由于在DO中没有规定因子1,起始值
      C*  为1,由于DO中也没有规定因子2,增量也为1。
      C*
      C
      C   17              DO        10            X                 3 0
      C                   :
      C                   ENDDO
      C*
      C*  DO组执行10次。当字段X中的值大于因子2中的值(20)中,或者
      C*  在遇到ENDDO,指示器50为OFF时,DO组停止操作。当指示器50为
      C*  OFF时,不执行ENDDO操作。这样,控制传给ENDDO后的操作。
      C*  DO操作的因子1规定了起始值2,因子2规定了增量值2。
      C*
      C     2             DO        20            X                 3 0
      C                   :
      C                   :
      C                   :
      C   50              ENDDO     2
  

图130  DO操作

4.4.24  DOU(DO Until)

                操作码                因子1                扩展因子2
                DOU                空格                表达式

    DOU操作执行一组至少执行一次也可能执行多次的操作。开始它的功能与DOUxx操作类似。相应的ENDDO语句表示该组操作的结束。它们的原则是在扩展因子2上用一个指示器值表达式来表示的逻辑条件。扩展因子2上的表达式为真时执行DOU表达式。详细资料见第二十一章。
    允许级别和条件指示器。因子1必须是空格,扩展因子2 是要计算的表达式。


      CL0N01Factor1+++++++OpcodeE+Extended-factor2++++++++++++++++++++++++++++++
      C                           Extended-factor2-continuation+++++++++++++++++
      C* 这例中,在按F3之前,重复Loop操作。
      C*
      C                   DOU     *INKC
      C                   :
      C                   :
      C                   ENDDO
      C
      C* 在*IN01为ON或FIELD2大于FIELD3之前,重复Loop操作。
      C*
      C
      C                   DOU     *IN01 OR (Field2 >; Field3)
      C                   :
      C                   :
      C                   ENDDO
      C* 在X大于数组元素个数之前,重复Loop操作。
      C*
      C
      C                   DOU     X >; %elem(Array)
      C                   EVAL    Total = Total + Array(x)
      C                   EVAL    X = X + 1
      C                   ENDDO
      C
      C*
  
图131  DOU举例

4.4.25  DOUxx(Do Until)

                操作码                因子1                因子2                结果字段                指示器
                DOUxx                比较数                比较数

    DOUxx执行一组至少执行一次也可能执行多次的操作。相应的ENDDO语句标出该组操作的结束。关于DO组更详细的资料和xx的含义,请参阅4.3.19“结构程序设计操作”。
    因子1和因子2必须是一个文字、一个命名常量、一个字段名、一个表名、一个数组元素、一个象征常数或是一个数据结构名。因子1和因子2的数据类型必须相同。
    在DOUxx语句上指明一个关系xx。为了规定一个更复杂的条件可以在DOUxx语句之后跟有ANDxx或ORxx的语句。DO组中的操作执行一次,然后重复执行DO组直至因子1和因子2之间关系存在为止,或者是由DOUxx、ANDxx或ORxx操作组合的特定条件存在为止。即使该组的起始条件就不为真,DO组中至少执行一次。
    另外,对DOUxx操作本身,在DOUxx和ENDDO语句上的条件指示器控制该DO组。DOUxx语句上的条件指示器控制是否开始DOUxx操作。相应的ENDDO语句上的条件指示器可使得DOU循环提前结束。

DOUxx操作的执行步骤如下:
        1、如果DOUxx上的条件指示器满足,执行DOU操作(第2步)。如果不满足,执行相应的ENDDO语句后的下一个操作(第6步)。
        2、通过把控制传给下一个可执行操作执行DOUxx操作(第3步)。DOUxx操作不比较因子1和因子2也不在这点上检测规定的条件。
        3、执行DO组中的每个操作。
        4、如果ENDDO语句上的条件指示器不满足,执行相应ENDDO语句之后的计算操作(第6步)。否则执行ENDDO操作(第5 步)。
        5、通过比较DOUxx 操作的因子1和因子2或者检测组合操作的条件来执行ENDDO操作。如果因子1和因子2之间的关系xx存在或者说明的条件存在,则DO组操作完成并执行ENDDO语句后面的计算操作(第6步)。如果因子1和因子2之间关系xx不存在或者说明的条件不存在,则重复组中的操作(第3步)。
        6、当DOUxx或ENDDO语句上的条件指示器不满足时(第1步或第4步),或者当因子1和因子2之间的关系xx存在,或第5步上规定的条件存在,执行ENDDO后面的语句。
    关于这些操作如何影响一个DOUxx的信息请参阅“LEAVE(离开DO组)”和“ITER(重复)”。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  DOUEQ操作至少运行一次DO组中的操作。
      C
      C     FLDA          DOUEQ     FLDB
      C
      C*
      C*  在ENDDO时,要做检测来确定FLDA是否等于FILDB。如果不等,再次
      C*  执行前面的操作,Loop继续执行直到FLDA等于FLDB;相等时,程序
      C*  转至执行ENDDO后面的操作。
      C
      C                   SUB       1             FLDA
      C                   ENDDO
      C
      C*  DOUEQ  ANDEQ  OREQ组合至少执行一次DO组中的操作。
      C
      C     FLDA          DOUEQ     FLDB
      C     FLDC          ANDEQ     FLDD
      C     FLDE          OREQ      100
      C
      C*
      C*  在ENDDO操作时,要检查规定的条件,即FLDA是否等于FLDB且FLDC是
      C*  否等于FLDD。如果条件存在,程序转至ENDDO后面的语句,否则,执行
      C*  OREQ后的操作。程序处理第二个DOUEQ开始的条件检查。如果DOUEQ和
      C*  ANDEQ以及OREQ的条件都不满足,再次执行OREQ后的操作。
      C
      C                   SUB       1             FLDA
      C                   ADD       1             FLDC
      C                   ADD       5             FLDE
      C                   ENDDO

图132  DOUxx操作

4.4.26  DOW(Do While)

                操作码                        因子1                因子2
                DOW                        空格                表达式

    DOW操作执行一组满足给定条件的操作。它的功能与DOWxx操作类似。相应的ENDDO语句标出该组操作的结束。不同的是用扩展因子2上指示器值表达式来表示一个逻辑条件。当扩展因子2字段中的表达式为真时执行DOW控制的操作。
    允许控制级和条件指示器。因子1必须是空格,因子2是要计算的表达式。


      CL0N01Factor1+++++++OpcodeE+Extended-factor2++++++++++++++++++++++++++++++
      C                           Extended-factor2-continuation+++++++++++++++++
      C* 在这个例子中,在条件为假之前重复执行循环,即当A>;5和/或B+C不等于零。
      C*
      C
      C                   DOW     A <= 5 AND B+C = 0
      C                   :
      C                   :
      C                   ENDDO
      C
  
图133  DOW举例

4.4.27  DOWxx(Do While)

                操作码                因子1                因子2                结果字段                指示器
                DOWxx                比较数                比较数

    DOWxx操作执行一组满足给定条件的操作。用DOWxx语句后面的ANDxx或ORxx语句说明更复杂的条件。相应的ENDDO语句标出该组操作的结束。关于DO组更详细的内容和xx的含义,请参阅4.3.19“结构程序设计操作”。
    因子1和因子2必须是一个文字、一个命名常量、一个象征常数、一个字段名、一个表名、一个数组元素或一个数据结构名。因子1和因子2的数据类型必须相同。关于因子1和因子2的比较遵循比较操作中的同样规则。见4.3.6节“比较操作”。
    对DOWxx操作本身,在DOWxx和ENDDO语句上的条件指示器控制该DO组。DOWxx语句上的条件指示器控制是否开始DOWxx操作。相应的ENDDO语句上的条件指示器控制该DOW组是否重复执行。
    DOWxx操作执行步骤如下:
        1、如果DOWxx语句行上的条件指示器满足,执行DOWxx操作(第2步)。如果该指示器不满足,则执行相应的ENDDO语句后的下一个操作(第6步)。
        2、通过比较因子1和因子2或检测由DOWxx、ANDxx或ORxx操作组成的复合条件,执行DOWxx操作,如果因子1和因子2之间的关系xx或者组合操作说明的条件不存在,则DO组结束,控制转到ENDDO语句后面的下一个操作(第6步)。如果因子1和因子2之间的关系或者组合条件存在,则DO组的操作重复执行(第3步)。
        3、执行DO组中的每个操作。
        4、如果ENDDO语句上的条件指示器不满足,则执行相应的ENDDO语句后面的操作(第6步)。否则,执行ENDDO操作(第5步)。
        5、控制转给DOWxx,执行ENDDO操作(第2步)。(注意DOWxx语句上的条件指示器在第1步不再检测)。
        6、当DOWxx或ENDDO语句上的条件指示器不满足时(第1步或第4步),或者当因子1和因子2之间的关系xx或在第2步上说明的条件不存在时,执行ENDDO语句后面的语句。
    关于这些操作如何影响一个DOWxx操作的信息请参阅“LEAVE(离开DO组)”和“ITER(重复)”。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  仅当FLDA小于FLDB时,DOWLT执行DO组中的操作。如果FLDA
      C*  不小于FLDB,程序转至ENDDO语句的操作。如果FLDA小于LFDB,
      C*  执行DO组中的操作。
      C
      C     FLDA          DOWLT     FLDB
      C
      C*  ENDDO操作使程序执行第一个DOWLT操作,它要检查来确定FLDA是否
      C*  小于FLDB,在FLDA等于或大于FLDB前都要重复做这个循环,然后
      C*  程序转至执行END后的操作。
      C
      C                   MULT      2.08          FLDA
      C                   ENDDO
      C
      C*  在这个例子中,测试多个条件,DOWLT和ORLT组合,在FLDA小于
      C*  LFDB或FLDC时,执行DO组内的操作。如果规定的条件不存在, 程序转
      C*  到ENDDO后的操作。如果有一个条件存在,执行ORLT后的操作。
      C
      C     FLDA          DOWLT     FLDB
      C     FLDA          ORLT      FLDC
      C
      C*  ENDDO操作让程序转至第二个DOWLT操作,它测试确定需要的条件是否
      C*  存在,在FLDA等于或大于FLDB和FLDC时,一直要执行循环,然后程
      C*  序转到ENDDO后面的操作。
      C
      C                   MULT      2.08          FLDA
      C                   ENDDO

论坛徽章:
0
30 [报告]
发表于 2005-06-13 15:43 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

ELSE(否则)

                操作码                因子1                因子2                结果字段                指示器
                ELSE

    ELSE操作是IFxx和IF操作的可选部分。如果IFxx比较内容成立,执行ELSE之前的计算;否则,执行ELSE之后的计算。
    在总计计算中,控制级登记(7列和8列)可以是空格或者是L1-L9指示器、一个LR指示器或一个L0项把语句组成程序适当的段。控制级项仅针对文件。不允许条件指示器(9-11列)。
    用ENDIF操作关闭IFxx/ELSE组。
    4.4.43的图142举例说明了和IFxx连用的ELSE操作。

4.4.31  ENDyy(结束一个结构组)

                操作码                因子1                因子2                结果字段                指示器
                END                                         增量值
                ENDCS
                ENDDO                                        增量值
                ENDIF
                ENDSL

    ENDyy操作结束一个CASxx,DO,DOU,DOW,DOUxx,DOWxx,IF,IFxx或SELECT组的操作。
    ENDyy操作如下:
                END                结束一个CASxx,DO,DOU,DOUxx,DOW,DOWxx,                                                IF,IFxx或SELECT组。
                ENDCS                结束一个CASxx组。
                ENDDO                结束一个DO,DOU,DOUxx,DOW,DOWxx组。
                ENDIF                结束一个IF或IFxx组。
                ENDSL                结束一个SELECT组。
    在ENDyy操作中仅允许给出因子2,它给一个DO组定界。因子2为DO组的增量值。它可以是正的也可以是负的,不能有小数位,也可以为:数组元素、表名、数据结构、字段、命名常量或数字型文字。如果ENDDO上未规定因子2,则缺省增量为1。如果增量是负的,则DO组永远不会结束。
    ENDDO中条件指示器是可选项,但对ENDCS,ENDIF和ENDSL不允许使用条件指示器。
    不允许用结果指示器。对ENDCS,ENDIF和ENDSL,因子1、因子2和结果字段必须是空格。
    如果一个ENDyy的格式用在不正确的操作组(例如,ENDIF用在一个结构组),编译时会出错。
    使用ENDyy操作的例子,见CASxx、DO、DOUxx、DOWxx、IFxx和DOU、DOW、IF和SELECT操作举例。

4.4.32  ENDSR(结束子程序)

                操作码                因子1                因子2                结果字段                指示器
                ENDSR                标号                返回点

    ENDSR操作定义一个RPGⅣ子程序的结束并指出返回点。ENDSR必须是该子程序的最后一条语句。因子1可以是一个标号,该标号是子程序内GOTO操作转出的点。控制级内容(7和8列)可以是SR或空格。不允许规定条件指示器。
    ENDSR操作结束子程序,把控制返回到EXSR或CASxx语句之后的语句,除非该子程序紧跟是一个程序异常/错误子程序(*PSSR)或一个文件异常/错误子程序(INFSR)。对这些子程序,ENDSR操作的因子2可以存放子程序执行后控制返回的地点。因子2的内容可以是一个字段名,包括一个保留键字或文字或命名常量。如果说明了无效返回点,则RPGⅣ错误处理程序接收控制。
    关于返回点的详细信息见1.5.1.2的“文件异常/错误子程序(INFSR)”。
    RPGⅣ子程序编码的例子见4.4.37的图138。

4.4.33  EVAL(计算表达式)

                操作码                因子1                因子2
                EVAL                空格                赋值语句

    EVAL操作计算格式为结果=表达式的赋值语句的值。表达式计算后放在结果中。因此,结果不能是文字或常量,它必须是一个字段名、数组名、数组元素、数据结构、数据结构子字段或%SUBST内部函数的一个串。表达式可以产生任一RPG数据类型。表达式的类型必须与结果的类型相同。字符型或图形结果要左对齐,或按要求用空格填充或截断。
    如果结果表示一个不带下标的数组或一个ARRAY(*)的数组,表达式的值将分配给结果的每个元素,依据的原则在数组一章描述。否则,表达式仅做一次计算并把值放到数组或数组的每一个元素中。对于数字表达式,允许做扩展的舍入操作。舍入的规则与算术操作中的规则相同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP