亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 6886 | 回復(fù): 6
打印 上一主題 下一主題

『分享』在rpgle中使用EXTNAME和LIKEREC定義DS [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-04-16 15:18 |只看該作者 |倒序瀏覽
本帖最后由 pantierui 于 2011-08-12 15:38 編輯

我們可以在rpgle中使用LIKEREC來定義DS、DS的子字段、procedures的返回值或procedure的參數(shù)。

關(guān)鍵字LIKEREC的定義格式如下:
LIKEREC(intrecname{:*ALL|*INPUT|*OUTPUT |*KEY})
LIKEREC參數(shù)1:intrecname就是定義DS等時引用的內(nèi)部文件的record名
EXTNAME參數(shù)3:*ALL|*INPUT|*OUTPUT|*KEY的意思是提取format中符號參數(shù)的字段來定義DS等。
*ALL:提取全部字段
*INPUT:只提取輸入字段
*OUTPUT:只提取輸出字段
*KEY:只提取key字段

關(guān)鍵字EXTNAME & EXTFLD的定義格式如下:
EXTNAME(file-name{:format-name}{:*ALL| *INPUT|*OUTPUT|*KEY})
EXTFLD(field_name)

EXTNAME參數(shù)1:file-name就是定義DS時引用的外部文件
EXTNAME參數(shù)2:format-name就是引用的外部文件的format,如果又多個format的時候。
EXTNAME參數(shù)3:與LIKEREC意義相同

EXTFLD是重命名EXTNAME引用的字段的。

EXTNAME只能用來定義DS,不能定義DS的子字段。
d dcustom       e ds                  extname(custom:*key)  QUALIFIED
上面是可以的,但下面就不被允許了。
d dcustom         ds                 
d  subfld                             extname(custom:*key)  QUALIFIED

下面是具體的例子:
DB FILE: CUSTOM
                R CUSTOMR                   TEXT('CUSTOMER FILE')
                  CUST           5          TEXT('CUSTOMER NUMBER')
                                            COLHDG('CUSTOMER NUMBER')
                  NAME          20          TEXT('CUSTOMER NAME')
                                            COLHDG('CUSTOMER NAME')
                  ADDR          20          TEXT('CUSTOMER ADDRESS')
                                            COLHDG('CUSTOMER ADDRESS')
                  CITY          20          TEXT('CUSTOMER CITY')
                                            COLHDG('CUSTOMER CITY')
                  STATE          2          TEXT('STATE ABBREVIATION')
                                            COLHDG('STATE ABBREVIATION')
                  ZIP            5  0       TEXT('ZIP CODE')
                                            COLHDG('ZIP CODE')
                  ARBAL         10  2       TEXT('ACCOUNTS RECEIVABLE BALANCE')
                                            COLHDG('ACCOUNTS RECEIVABLE '-
                                             'BALANCE')
                K CUST
                K STATE

DSP FILE:TESTDSP
     A                                      DSPSIZ(24 80 *DS3)
     A                                      CA03
     A          R DSP1R
     A            FLDA           5A  I  1 25
     A            FLDB           2A  I  2 25
     A            FLDC           2Y 0B  3 25
     A            FLDD           2Y 0O  4 25
     A          R DSP2R
     A            FLDE           5A  O  5 25
     A            FLDF           2A  O  6 25
     A            FLDG           2Y 0B  7 25
     A            FLDH           2Y 0I  8 25

LIKEREC程序例子
RPGLE FILE:TEST1
     hDFTACTGRP(*NO)
     fcustom    if   e           k disk
     ftestdsp   cf   e             WORKSTN
     d************************ Data Structure **********************************
     d dsCustom        ds                  likerec(customr:*key)
     d dsDSPi          ds                  likerec(DSP1R:*input)
     d dsDSPo          ds                  likerec(DSP2R:*output)
     d*
     d wait            s              1a
     d func            pr                  likerec(customr:*key)
     d  parmA                              likerec(dsp1r:*input)
     c*
      /free
             // manipulate *key field
                         dscustom.cust = 'key';
                         dsply     dscustom.cust  wait;
             // manipulate *input field
                         dsDSPi.flda = 'input';
                         dsply     dsDSPi.flda     wait;
             // manipulate *output field
                         dsDSPo.flde = 'outpt';
                         dsply     dsDSPo.flde     wait;
             // manipulate procedure return value & procedure parameter
                         eval      dsCustom = func(dsDSPi);
                         dsply     dsCustom.state  wait;
      /end-free
     c*
     c                   SETON                                        LR
     c                   RETURN
     p func            b
     d*
     d func            pi                  likerec(customr:*key)
     d  parmA                              likerec(dsp1r:*input)
     d*
     d fdscustom       ds                  likerec(customr:*key)
     d*
     c                   eval      fdscustom.cust = parmA.flda
     c                   eval      fdscustom.STATE = %subst(parmA.flda:1:2)
     c                   return    fdscustom
     p func            e

EXTNAME程序例子:
RPGLE FILE:TEST
     d dcustom       e ds                  extname(custom:*key)  QUALIFIED
     d  custID       e                     extfld(CUST)
     d dsDSPi        e ds                  extname(TESTDSPSP1R:*input)
     d                                     QUALIFIED
     d dsDSPo        e ds                  extname(TESTDSPSP2R:*output)
     d                                     QUALIFIED
     d wait            s              1a
     c*
      /free
             // manipulate *key field
                         dcustom.custID = '*key';
                         dsply     dcustom.custID  wait;
             // manipulate *input field
                         dsDSPi.flda = '*input';
                         dsply     dsDSPi.flda     wait;
             // manipulate *output field
                         dsDSPo.flde = '*output';
                         dsply     dsDSPo.flde     wait;
      /end-free
     c*
     c                   SETON                                        LR
     c                   RETURN

LIKEREC和EXTNAME都可以用來定義DS,那他們的區(qū)別是什么那,我認(rèn)為有以下幾點:
1.EXTNAME只能定義DS,不能用來定義DS的子字段、procedure的返回值和procedure的參數(shù)。而LIKEREC可以。
2.從引用的文件角度講,EXTNAME引用的文件不需要在F表中聲明,而LIKEREC必須在F表中聲明。
3.從使用的角度來講,如果EXTNAME定義的DS想要DS.SUBFIELD這樣使用,必須在定義時使用關(guān)鍵字QUALIFIED,而LIKEREC則不用,因為LIKEREC定義的DS自動添加了關(guān)鍵字QUALIFIED。

歡迎大家來拍磚~~~


【update】
在使用上extname和likerec有些不同,如下面的例子
第一種方式(采用關(guān)鍵字LIKEREC):
F KKPCEP00  IF   E           K DISK                                                                          
D*                                                      
D W#DS             DS                  LIKEREC(KKPCER)   
D PCEDS            DS                  QUALIFIED
D W#FLG                           1A            
D PCE01                           2A            
D PCE02                           2A      
...
C     W#FLG#        CHAIN     KKPCEP00      W#DS   
C                   EVAL      PCEDS =W#DS               


第二種方式(采用關(guān)鍵字EXTNAME):
F KKPCEP00  IF   E           K DISK                                                                          
D*  
D W#DS           E DS                  EXTNAME(KKPCEP00)
D PCEDS            DS                  QUALIFIED   
D W#FLG                           1A            
D PCE01                           2A            
D PCE02                           2A  
  ...
C     W#FLG#        CHAIN     KKPCEP00        
C                   EVAL      PCEDS =W#DS

在第二種方式在執(zhí)行完chain后W#DS就會有chain到的值。而如果要想用likerec定義ds也有值,那就的是如下的寫法
C     W#FLG#        CHAIN     KKPCEP00      W#DS   

主要的原因是QUALIFIED,因為likerec定義的ds會自動添加QUALIFIED,我在上面有說。

持續(xù)更新中。。。。。

評分

參與人數(shù) 1可用積分 +2 收起 理由
fairyboy + 2 全都忘記了,嘿嘿

查看全部評分

論壇徽章:
0
2 [報告]
發(fā)表于 2011-04-17 18:21 |只看該作者
支持分享~~~ 謝謝!

論壇徽章:
0
3 [報告]
發(fā)表于 2011-08-11 16:17 |只看該作者
支持,叁Q

論壇徽章:
0
4 [報告]
發(fā)表于 2011-08-12 16:11 |只看該作者
討論完畢前來拍磚

論壇徽章:
0
5 [報告]
發(fā)表于 2011-08-19 12:40 |只看該作者

論壇徽章:
0
6 [報告]
發(fā)表于 2011-08-19 12:57 |只看該作者
PTR V5

論壇徽章:
0
7 [報告]
發(fā)表于 2011-11-22 10:27 |只看該作者
回復(fù) 1# pantierui


   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP