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

  免費(fèi)注冊 查看新帖 |

Chinaunix

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

數(shù)組和DS使用方法總結(jié) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-07-22 15:35 |只看該作者 |倒序?yàn)g覽
既然是總結(jié)性的東東,就不寫的太詳細(xì)了。細(xì)節(jié)和簡單的東東就不提了。

ARRAY
一 array與table的區(qū)別
        Array:可以使用下標(biāo),進(jìn)行順序訪問或隨即訪問
        Table:不可以使用下標(biāo),只能順序訪問。只能以TABxxx開頭。
        注:table雖然和array的功能相似,但是array要比table靈活很多。Table可以淘汰了,了解table的原因是維護(hù)老的代碼時(shí)可能會(huì)用到。

二 array的類型和key word
        1有三種類型的array,分別是compile time array、run time array、pre-run time array。
        
        2與array相關(guān)的key word:
        DIM(number)         定義數(shù)組中元素的數(shù)量
        ASCEND/DESCEND    元素在數(shù)組中升序/降序排序
        PERRCD(number)   對(duì)于compile time array每一行中元素的個(gè)數(shù)
        CTDATA                   定義compile time array
        FROMFILE/TOFILE      定義pre-run time array會(huì)用到
        EXTFMT            
        舉例:
        //array1定義10個(gè)元素,每個(gè)長度為5
        D Array1            S                5 0 DIM(10)
        //array2是compile time array,共6行,每行3個(gè)元素,每個(gè)元素10個(gè)長度,升序排序
        D Array2            S               10  DIM(6) PERRCD(3) CTDATA  ASCEND
        //compile time array要在程序的結(jié)尾定義數(shù)據(jù)
** CTDATA ARRAY2
Element1  Element2   Element3
Element4  Element5   Element6
Element7  Element8   Element9
Element10

        注:如果compile time array的數(shù)據(jù)發(fā)生變化,那么要更改程序源代碼中的元素值,并要重新編譯程序。
        在程序的末尾要有** CTDATA 。建議使用** CTDATA array_name的方式,但是要注意array_name要與D-spec 定義的array_name要一致;僅用   **CTDATA(不指定array_name)時(shí)要注意** CTDATA的數(shù)據(jù)按照D-spec定義的array的順序進(jìn)行匹配。并且兩者不能混著用。

        3 Index:index不能為0或負(fù)數(shù),不能大于元素個(gè)數(shù)。

三 array相關(guān)的%BIF
        
        1 %Xfoot 數(shù)組求和
        Sum = %Xfoot(array_name)

        2 %LookUpxx 查找(%TLookUpxx for table)

         Index = %LookUpXX(argument:array{:satrtindex})
         %LookUp         查找第一個(gè)=argument元素的index
         %LookUpLE      查找第一個(gè)<=argument的元素index
         %LookUpLT      查找第一個(gè)<argument的元素的index
         %LookUpGE     查找第一個(gè)>=argument的元素的index
         %LookUpGT     查找第一個(gè)>argument的元素的index
         注:除了%LookUp外,使用其他的%LookUpxx的數(shù)組必須是排過序的。

        3 %Size 返回變量或常量所占的字節(jié)數(shù)
        Size = %Size(name{:*all})
        D SmallFiled          S                5P 2
        D MyArray            S                5   DIM(%Size(Smallfield))

        SizeSmall = %Size(SmallField)           //SizeSmall = 3
        ArraySize = %Size(MyArray)          //ArraySize = 5      單個(gè)元素的size
        Arraysize = %Size(Myarray:*all)   //Arraysize = 150    所有元素的size

        4 %Elem 返回?cái)?shù)組中元素的個(gè)數(shù)
        Number = %Elem(array_name)
        

Data structure
        Data structure是什么?答:數(shù)據(jù)結(jié)構(gòu)。評(píng):廢話。—_—!

一 DS的key word
        OCCURS(number)                       定義DS數(shù)組
        OVERLAY(name:{pos})               在DS中重定義sub-filed
        PREFIX(prefix)                            為外部的字段增加前綴。
        EXTNAME(name:{fmt_name})      參照的外部文件格式,文件不需要在F-spec定義
        EXTFLD(field_name)                    將外部數(shù)據(jù)格式的字段重命名
        QUALIFIED                                    指定引用
        LIKEDS                                         引用DS的格式,隱含自動(dòng)聲明QUALIFIED
        LIKEREC                                       引用外部文件,文件要在F-spec中定義,隱含自動(dòng)聲明QUALIFIED
        LIKE                                             參照字段定義

簡單的例子:
        FItem_PF     IF  E            K  DISK
        D keystr          DS                       LIKEREC(Item_fmt)
         *
        D #lda         E  DS                       EXTNAME(lda)
          *
        D cust            DS                       QUALIFIED
        D  name                               50a
        D  id                                    10i 0
         *
        D part            DS                        QUALIFIED
        D  name                               25a
        D  id                                    10i 0
         *
        D part1           DS                         LIKEDS(part)
        D part2           DS                         LIKEDS(part)

二 DS的用法
        1 group field(字段組合使用)
        
        D Stamp           DS
        D  OrderNo                            5
        D  OrderDate                         6 0
        D  OperInit                            3

        2 subdivide field(字段拆分使用)
        
        D                DS
        D ProductNo                            16
        D  model                                   4    overlay(productNO:1)
        D  fabric                                    6    overlay(productno:*next)
        D  color                                     3    overlay(productno:*next)
        D  size                                      3 0  overlay(productno:*next)

        注:Subfield的默認(rèn)類型是S和A。還可以定義成P和B

數(shù)組和DS配合使用

        DS和ARRAY配合使用,屬于編程方面的小技巧,使用得當(dāng)?shù)脑,?huì)大大簡化程序代碼。
        
        1 DS數(shù)組:
        D ARR       DS         DIM(10) QUALIFIED
        D  SUB1           5A
        D  SUB2           5S 0

        2 二維數(shù)組:
        D ARR        DS                DIM(10) QUALIFIED  
        D  SUBARR              10 0    DIM(20)
        相當(dāng)于定義了一個(gè)arr[10][20]的二維數(shù)組
        使用方法:
        C           FOR i=1 to %elem(arr)
        C           FOR j=1 to %elem(subarr)
        C              eval  sum += arr(i).subarr(j)

       3 如果PF有一些連續(xù)的相同屬性的字段,可以考慮把他們放到array中來處理,比如:
        1)連續(xù)的字段位于文件的最開始:
        A                 R REC
        A                   FLD1                         5P 0
        A                   FLD2                         5P 0
        A                   FLD3                         5P 0
        A                   OTHER                     10A

        處理代碼:
        FMYFILE    IF E            DISK
        D myDS       E DS                 EXTNAME(MYFILE)
        D fldArray                            LIKE(FLD1) DIM(3)
        D                                        OVERLAY(myDs)
        C                    READ MYFILE
        C                    FOR i = 1 to %ELEM(fldArray)
        C*                   ... process fldArray(i)
        C                    ENDFOR

        2)連續(xù)的字段位于文件的中間:
        A                 R REC
        A                   OTHER1             10A
        A                   FLD1                         5P 0
        A                   FLD2                         5P 0
        A                   FLD3                         5P 0
        A                   OTHER2                   10A

        FMYFILE    IF E            DISK
        D myDS          E DS               EXTNAME(MYFILE)
        D fldArray          S                 LIKE(FLD1) DIM(3)
        D                                         BASED(pFldArray)
        D pFldArray       S           *    INZ(%addr(FLD1))
        C                   READ MYFILE
        C                   FOR i = 1 to %ELEM(fldArray)
        C*                  ... process fldArray(i)
        C                   ENDFOR  
        這種情況下,先定義一個(gè)指針,獲取第一個(gè)重復(fù)字段的地址,相當(dāng)于獲取數(shù)組的首地址,也就相當(dāng)于獲取了這個(gè)數(shù)組。

        3)如果PF中的字段有周期性重復(fù)的,比如:
        A                 R REC
        A                    FIELD                  5P 0
        A                   OTHER1             10A
        A                   FLD1                    5P 0
        A                   OTHER2             10A
        A                   FLD2                     5P 0
        A                   OTHER3            10A
        A                   FLD3                     5P 0

        FMYFILE    IF E            DISK
        D myDS         E DS              EXTNAME(MYFILE)
        D fldArray         DS              DIM(3)  BASED(pFldArray) QUALIFIED
        D  sub1                              LIKE(OTHER1) OVERLAY(fldArray:1)
        D  sub2                              LIKE(FLD1) OVERLAY(fldArray:*NEXT)                              
        D pFldArray       S           *    INZ(%addr(FLD1))
        C                   READ MYFILE
        C                   FOR i = 1 to %ELEM(fldArray)
        C*                  ... process fldArray(i)
        C                   ENDFOR  

        把重復(fù)出現(xiàn)的字段看成一個(gè)整體,來作為array的元素,然后再拆分。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-07-22 22:59 |只看該作者
只用過一點(diǎn)點(diǎn)的東西

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-07-25 08:54 |只看該作者
沒總結(jié)之前,總覺得數(shù)組和DS的用法零零碎碎,好像有很多的東東要掌握
現(xiàn)在發(fā)現(xiàn),不過如此

論壇徽章:
1
操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-11-05 06:20:00
4 [報(bào)告]
發(fā)表于 2011-07-25 21:06 |只看該作者
頂起啊~~學(xué)習(xí)了 啊

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-07-26 15:45 |只看該作者
為什么不用臨時(shí)表,非要在RPG中寫個(gè)array , 整個(gè)麻煩, 一般在使用系統(tǒng)提供的用戶名,機(jī)器名,打印行數(shù)溢出等判斷時(shí)才會(huì)用array .

如果想在兩個(gè)程序間通信也要用queue 或 data area 才對(duì)哦.

論壇徽章:
1
操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-11-05 06:20:00
6 [報(bào)告]
發(fā)表于 2011-07-26 18:04 |只看該作者
什么和什么?

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2011-07-26 21:51 |只看該作者
為什么不用臨時(shí)表,非要在RPG中寫個(gè)array , 整個(gè)麻煩, 一般在使用系統(tǒng)提供的用戶名,機(jī)器名,打印行數(shù)溢出等判 ...
notthought 發(fā)表于 2011-07-26 15:45



    臨時(shí)表要有SRC才能生成吧
而且對(duì)FILE的操作和對(duì)ARRAY的操作速度差很多

用戶名,機(jī)器名那些也是一方面的用途

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2011-07-27 08:30 |只看該作者
回復(fù) 5# notthought


    ARRAY是任何語言都支持的一種數(shù)據(jù)結(jié)構(gòu),RPG中存在肯定也有他的道理,有的情況下用array會(huì)非常方便簡潔

    至于用臨時(shí)表還是array,我到覺得array可能會(huì)更簡單一些哦。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2013-01-05 11:13 |只看該作者
niuhua77 發(fā)表于 2011-07-22 15:35
既然是總結(jié)性的東東,就不寫的太詳細(xì)了。細(xì)節(jié)和簡單的東東就不提了。

ARRAY
..................
在程序的末尾要有** CTDATA 。建議使用** CTDATA array_name的方式,但是要注意array_name要與D-spec 定義的array_name要一致;僅用   **CTDATA(不指定array_name)時(shí)要注意** CTDATA的數(shù)據(jù)按照D-spec定義的array的順序進(jìn)行匹配。并且兩者不能混著用。


這里有誤導(dǎo)之嫌,以下是原文:
Array data may be specified in one of two ways:
1. **CTDATA arrayname: The data for the array may be specified anywhere in the compile-time data section.
2. **b: (b=blank) The data for the arrays must be specified in the same order in which they are specified in the Definition specifications.
Only one of these techniques may be used in one program.

顯然該匹配的應(yīng)是 **BLANK的方式而非**CTDATA
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP