




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 COBOL語言程序設計語言程序設計2021-12-14第六章第六章 COBOL中的表中的表6.1表的概念表的概念6.2表的聲明表的聲明6.3表的賦值與引用表的賦值與引用6.4表的應用表的應用 COBOL語言程序設計語言程序設計2021-12-146.1表的概念表的概念Student-recordwangzhanglizhumathengmathengmathengmatheng9(4)9(4)9(4)9(4)9(4)9(4)9(4)9(4)COBOL語言中的表(語言中的表(TABLE)類似于其他高級語言中的數(shù)組)類似于其他高級語言中的數(shù)組(ARRAY)。)。 COBOL語言程序設計語言程序設
2、計2021-12-1401 student-record. 02 wang. 03 math pic 9(4). 03 eng pic 9(4). 02 zhang. 03 math pic 9(4). 03 eng pic 9(4). 02 zhu. 03 math pic 9(4). 03 eng pic 9(4). 為解決這種重復性工作,我們可為解決這種重復性工作,我們可以用一個統(tǒng)一的名字去代表那些以用一個統(tǒng)一的名字去代表那些地位、作用和描述相同的數(shù)據(jù)項地位、作用和描述相同的數(shù)據(jù)項,這就是,這就是“表表”。如果有100個人呢,如果人更多呢?? COBOL語言程序設計語言程序設計2021-
3、12-14表中,序號表中,序號(即指出表中第幾個元素)稱為下標,相對地址即指出表中第幾個元素)稱為下標,相對地址(相對于表中第一個元素的字節(jié)地址)稱為位標,下標和(相對于表中第一個元素的字節(jié)地址)稱為位標,下標和位標統(tǒng)稱為位標統(tǒng)稱為“出現(xiàn)號出現(xiàn)號”。 Student-recordStudent(1)Student(2)Student(99)Student(100)mathengmathengmathengmatheng9(4)9(4)9(4)9(4)9(4)9(4)9(4)9(4)表名為表名為Student,有,有100個表元素,類似于數(shù)組元素個表元素,類似于數(shù)組元素 COBOL語言程序設計語
4、言程序設計2021-12-146.2表的聲明(表的聲明(OCCURS子句)子句) 格式:格式:OCCURS 整數(shù)整數(shù) TIMES (在數(shù)據(jù)部中說明)在數(shù)據(jù)部中說明) 舉例:舉例:01 STUDENT-RECORD. 02 STUDENT OCCURS 100 TIMES. 03 MATH PIC 9(4). 03 ENG PIC 9(4). 進一步簡化:進一步簡化: 03 COURSE OCCURS 2 TIMES. 這樣又建立了一個表這樣又建立了一個表 “COURSE”,它的元素需要兩個下標才,它的元素需要兩個下標才能確定,因此是一個二維表。如果要找第三個學生的英語成能確定,因此是一個二維表
5、。如果要找第三個學生的英語成績,則:績,則:COURSE (3, 2) , 第一個下標是指第幾個學生,第二第一個下標是指第幾個學生,第二個下標指出第幾門成績。個下標指出第幾門成績。 此時此時STUDENT是一維表還是二維表?是一維表還是二維表? COBOL語言程序設計語言程序設計2021-12-14 01 EXAMPLE-TABLE-ONE. /*表的名稱表的名稱*/ 05 TABLE-COL OCCURS 5 TIMES. /*表的一列,表的一列,共重復共重復5列列*/ 10 TABLE-ITEM-1 PIC X(1). /*表的第一個條目表的第一個條目*/ /*省略表的其他條目省略表的其他
6、條目*/ 10 TABLE-ITEM-N PIC X(3). /*表的最后一個條目表的最后一個條目*/ COBOL語言程序設計語言程序設計2021-12-14當表中僅有一個條目時,則不需要定義表的列,而直接由條目當表中僅有一個條目時,則不需要定義表的列,而直接由條目取代。取代。在該情況下表的定義如下。在該情況下表的定義如下。 01 EXAMPLE-TABLE-TWO. /*表的名稱表的名稱*/ 05 TABLE-ITEM PIC X(5) /*表的條目表的條目*/ OCCURES 3 TIMES. /*該條目重復該條目重復3次次*/ COBOL語言程序設計語言程序設計2021-12-14 01
7、 TABLE. 02 A1 OCCURS 5 TIMES. 03 B1 PIC X(3). 03 B2 OCCURS 10 TIMES PIC 9(4). 03 B3 OCCURS 8 TIMES. 04 C1 PIC 9(6). 04 C2 OCCURS 20 TIMES PIC 99. 04 C3 PIC 9(4). 03 B4 PIC X(3). 02 A2 PIC X(5). 02 A3 PIC X(10). COBOL語言程序設計語言程序設計2021-12-141)A1,B1,B4是一維表,引用表元素只需一個出現(xiàn)號。是一維表,引用表元素只需一個出現(xiàn)號。如如:A1(3),B1(5),B
8、4(1)等。等。2)B2,B3,C1,C3是二維表。引用它們需用兩個出現(xiàn)號。是二維表。引用它們需用兩個出現(xiàn)號。如:如:B2(5,3), B3(4,8), C1(2,7), C3(1,8)等。等。3)C2是一個三維表。引用時需用三個出現(xiàn)號。如:是一個三維表。引用時需用三個出現(xiàn)號。如:C2(4,3,1)。4)A2, A3不是不是“表名表名”,而是普通的初等數(shù)據(jù)項。,而是普通的初等數(shù)據(jù)項。 COBOL語言程序設計語言程序設計2021-12-1401 TaxRec. 02 PAYENum PIC 9(8) 02 CountyCode PIC 99. 02 TaxPaid PIC 9(7)V99. 01
9、 CountyTaxTable. 02 CountyTax PIC 9(8)V99 OCCURS 26 TIMES.MOVE 10 TO CountyTax(3) ADD TaxPaid TO CountyTax(CountyCode)ADD TaxPaid TO CountyTax(CountyCode + 1) ADD TaxPaid TO CountyTax(CountyCode - 2) COBOL語言程序設計語言程序設計2021-12-14PERFORM VARYING CountyNum FROM 1 BY 1 UNTIL CountyName(CountyNum) = Count
10、y END-PERFORM ADD TaxPaid TO CountyTax(CountyNum) COBOL語言程序設計語言程序設計2021-12-1401 CountyTaxTable. 02 CountyTaxDetails OCCURS 26 TIMES. 03 CountyTax PIC 9(8)V99. 03 PayerCount PIC 9(7). MOVE ZEROS TO CountyTax(3) MOVE 67 TO PayerCount(6) MOVE 1234.45 TO CountyTax(4) MOVE ZEROS TO CountyTaxDetails(4)MOV
11、E ZEROS TO CountyTaxTable COBOL語言程序設計語言程序設計2021-12-1401 PopulationTable. 02 Age OCCURS 3 TIMES. 03 Gender OCCURS 2 TIMES. 04 PopTotal PIC 9(6). MOVE ZEROS TO PopulationTable MOVE 123 TO PopTotal(3,1) MOVE 456 TO Gender(3,2) ADD 1255 TO PopTotal(2,2) MOVE ZEROS TO Age(3) COBOL語言程序設計語言程序設計2021-12-1401
12、 PopulationTable. 02 County OCCURS 26 TIMES. 03 Age OCCURS 3 TIMES. 04 Gender OCCURS 2 TIMES. 05 PopTotal PIC 9(6). MOVE ZEROS TO County(1) MOVE ZEROS TO Age(2,3) MOVE ZEROS TO PopTotal(2,1,2) MOVE 56 TO PopTotal(1,3,2) MOVE 12 TO PopTotal(2,1,1) MOVE ZEROS TO PopulationTable COBOL語言程序設計語言程序設計2021-1
13、2-14例子:例子: 01 ANNUAL-SALARY-TABLE. 05 SALARIESPIC 9(5) OCCURS 12 TIMES. 05 SALARY-SUBPIC 99. 77 ANNUAL-TOTAL PIC 9(10). PERFORM 200-ADD-TO-TOTAL VARYING SALARY-SUB FROM 1 BY 1 UNTILSALARY-SUB 12 200-ADD-TO-TATAL. ADD SALARIES (SALARY-SUB) TO ANNUAL-TOTAL. COBOL語言程序設計語言程序設計2021-12-14 COMPUTE ANNUAL-T
14、OTAL = SALARIES (1) + SALARIES (2) + SALARIES (3) + SALARIES (4) + SALARIES (5) + SALARIES (6) + SALARIES (7) + SALARIES (8) + SALARIES (9) + SALARIES (10) + SALARIES (11) + SALARIES (12) . COBOL語言程序設計語言程序設計2021-12-14PERFORM 200-ADD-TO-TOTAL VARYING SALARY-SUB FROM 1 BY 2 UNTIL SALARY-SUB 11PERFORM
15、200-ADD-TO-TOTAL VARYING SALARY-SUB FROM 10 BY 1 UNTIL SALARY-SUB 12PERFORM 200-ADD-TO-TOTAL VARYING SALARY-SUB FROM 1 BY 1 UNTIL SALARY-SUB 6 COBOL語言程序設計語言程序設計2021-12-14MOVE 1 TO SALARY-SUB. PERFORM 200-ADD-TO-TOTALUNTIL SALARY-SUB 12200-ADD-TO-TATAL. ADD SALARIES (SALARY-SUB) TO ANNUAL-TOTAL. ADD
16、1 TO SALARY-SUB. COBOL語言程序設計語言程序設計2021-12-14例如例如: 計算銷售總額計算銷售總額MOVE ZERO TO SALES-TOTAL.PERFORM VARYING sub FROM 1 BY 1 UNTIL sub 12ADD SALES (sub) TO SALES-TOTALEND-PERFORM. COBOL語言程序設計語言程序設計2021-12-14說明:說明: 1.OCCURS子句不能出現(xiàn)在子句不能出現(xiàn)在77層,因為層,因為77層是獨立的層是獨立的數(shù)據(jù)項。數(shù)據(jù)項。 2OCCURS子句不能用于子句不能用于01層。層。 3只有當只有當OCCURS
17、所說明的數(shù)據(jù)是初等項時,才能在所說明的數(shù)據(jù)是初等項時,才能在該數(shù)據(jù)項的描述中使用該數(shù)據(jù)項的描述中使用PIC子句。子句。 4多維表的元素在內存中是以行排列的。如果多維表的元素在內存中是以行排列的。如果A是一是一個二維表,每一維中包含兩個元素,在內存中按以下順序個二維表,每一維中包含兩個元素,在內存中按以下順序排列:排列:A(1,1)=A(1,2)=A(2,1)=A(2,2)。 COBOL語言程序設計語言程序設計2021-12-14可變長表可變長表 格式:格式:OCCURS 整數(shù)整數(shù)1 TO 整數(shù)整數(shù)2 TIMES DEPENDING ON 數(shù)據(jù)名數(shù)據(jù)名1 說明:根據(jù)數(shù)據(jù)名說明:根據(jù)數(shù)據(jù)名1的值來
18、確定數(shù)據(jù)項重復的次數(shù),即表的值來確定數(shù)據(jù)項重復的次數(shù),即表元素的個數(shù)。數(shù)據(jù)名元素的個數(shù)。數(shù)據(jù)名1可以在表所在的記錄中描述,也可可以在表所在的記錄中描述,也可以在工作單元節(jié)中描述,但不能是表中的一部分。以在工作單元節(jié)中描述,但不能是表中的一部分。例:例:01 STUDENT-RECORD. 02 STUDENT OCCURS 10 TO 100 TIMES DEPENDING ON STUDENT-NUM . 03 MATH PIC 9(4). 03 ENG PIC 9(4). 02 STUDENT-NUM PIC 9(3). COBOL語言程序設計語言程序設計2021-12-14給表元素賦初值
19、給表元素賦初值 (三種方法)三種方法) 1對包括所有表元素的整個表賦給一個初值,這時可以對表對包括所有表元素的整個表賦給一個初值,這時可以對表的描述體上面一層的數(shù)據(jù)項賦一個初值即可。的描述體上面一層的數(shù)據(jù)項賦一個初值即可。 例例1:01 TABLE VALUE IS ZERO. 03 Q OCCURS 20 PIC 9(3). 例例2:01 T VALUE ABCDEFHIJ. 03 Q OCCURS 3 PIC X(3). 這樣,這樣,Q(1),),Q(2),),Q(3)的內容分別是)的內容分別是ABC,DEF,HIJ。6.3 表的賦值與引用表的賦值與引用 COBOL語言程序設計語言程序設計
20、2021-12-142聯(lián)合使用聯(lián)合使用OCCURS子句和子句和REDEFINES子句來給各個表元素子句來給各個表元素賦值。賦值。 步驟:步驟:(1)先在工作單元節(jié)中定義一個組合項,它占的內存的大小和)先在工作單元節(jié)中定義一個組合項,它占的內存的大小和需賦值的表一樣,在該組合項中定義若干個數(shù)據(jù)項,數(shù)據(jù)項需賦值的表一樣,在該組合項中定義若干個數(shù)據(jù)項,數(shù)據(jù)項的描述和表的元素相同。的描述和表的元素相同。(2)然后對這些數(shù)據(jù)項分別用)然后對這些數(shù)據(jù)項分別用VALUE子句賦以初值,由于在這子句賦以初值,由于在這些數(shù)據(jù)項的描述中沒有出現(xiàn)些數(shù)據(jù)項的描述中沒有出現(xiàn)OCCURS子句,因此用子句,因此用VALUE賦
21、賦初值是合法的(初值是合法的(VALUE子句和子句和OCCURS子句不能同時用來描子句不能同時用來描述一個數(shù)據(jù)項)。這些值就是要賦給表元素的初值。述一個數(shù)據(jù)項)。這些值就是要賦給表元素的初值。(3)把這個組合項重定義為一個表。)把這個組合項重定義為一個表。3. 用用MOVE語句賦值。語句賦值。 COBOL語言程序設計語言程序設計2021-12-14 01 PRICE-TABLE. 02 FILLER PIC X(10) VALUE 0010000200. 02 FILLER PIC X(10) VALUE 0020000500. 02 FILLER PIC X(10) VALUE 003000
22、0400. 02 FILLER PIC X(10) VALUE 0040000300. 02 FILLER PIC X(10) VALUE 0050000300. 01 PRICE-TABLE-R REDEFINES PRICE-TABLE. 02 TABLE OCCURS 5. 03 PROD-CODE PIC 9(4). 03 PROD-PRICE PIC 9(6). COBOL語言程序設計語言程序設計2021-12-14舉例舉例 IDENTIFICATION DIVISION. IDENTIFICATION DIVISION. PROGRAM-ID. EXAM2A4. PROGRAM-I
23、D. EXAM2A4. ENVIRONMENT DIVISION. ENVIRONMENT DIVISION. DATA DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. WORKING-STORAGE SECTION. 01 UNIT-PRICE-TABLE. 01 UNIT-PRICE-TABLE. 02 FILLER PIC X(10) VALUE 0010000200. 02 FILLER PIC X(10) VALUE 0010000200. 02 FILLER PIC X(10) VALUE 0020000500. 02 FILLE
24、R PIC X(10) VALUE 0020000500. 02 FILLER PIC X(10) VALUE 0030000300. 02 FILLER PIC X(10) VALUE 0030000300. 02 FILLER PIC X(10) VALUE 0040000250. 02 FILLER PIC X(10) VALUE 0040000250. 02 FILLER PIC X(10) VALUE 0050005000. 02 FILLER PIC X(10) VALUE 0050005000. 01 UNIT-PRICE-TABLE-R REDEFINES UNIT-PRICE
25、- 01 UNIT-PRICE-TABLE-R REDEFINES UNIT-PRICE-TABLE.TABLE. 02 TABLE-R OCCURS 5. 02 TABLE-R OCCURS 5. 03 PROD-CODE PIC 9(4). 03 PROD-CODE PIC 9(4). 03 PROD-PRICE PIC 9(6). 03 PROD-PRICE PIC 9(6). 77 I PIC 9. 77 I PIC 9. 77 CODE-E PIC 9 77 CODE-E PIC 9(4 4). . 77 PRICE-E PIC 9 77 PRICE-E PIC 9(6 6). .
26、COBOL語言程序設計語言程序設計2021-12-14舉例舉例 PROCEDURE DIVISION. PROCEDURE DIVISION. S. PERFORM VARYING I FROM 1 BY 1 UNTIL I 5 S. PERFORM VARYING I FROM 1 BY 1 UNTIL I 5 MOVE PROD-CODE (I) TO CODE-E MOVE PROD-CODE (I) TO CODE-E MOVE PROD-PRICE (I) TO PRICE-E MOVE PROD-PRICE (I) TO PRICE-E * * DISPLAY I DISPLAY
27、I DISPLAY CODE:, CODE-E, IS , PRICE-E DISPLAY CODE:, CODE-E, IS , PRICE-E END-PERFORM END-PERFORM STOP RUN. STOP RUN. CODE: 10 IS $200CODE: 20 IS $500CODE: 30 IS $300CODE: 40 IS $250 CODE: 50 IS $5000 COBOL語言程序設計語言程序設計2021-12-14用位標法引用表元素用位標法引用表元素 下標下標元素在表中的序號元素在表中的序號 位標位標元素在表中的相對位置元素在表中的相對位置 1位標的概念:
28、位標的值表示表元素在該表中的相對位置(以位標的概念:位標的值表示表元素在該表中的相對位置(以字節(jié)數(shù)表示字節(jié)數(shù)表示)。以表的第一個元素的第一個字節(jié)作為)。以表的第一個元素的第一個字節(jié)作為相對地址相對地址0,位標就是所指定的元素的第一個字節(jié)的相對地址,即它對表的位標就是所指定的元素的第一個字節(jié)的相對地址,即它對表的起始位置的位移量。相對地址的計算公式是:起始位置的位移量。相對地址的計算公式是: (表元素的序號(表元素的序號1)表元素長度表元素長度 2位標名的指定方法:用位標法引用元素可以寫成位標名的指定方法:用位標法引用元素可以寫成T(I)形式,其形式,其中中I是位標名。在數(shù)據(jù)部中定義一個表時所用
29、的是位標名。在數(shù)據(jù)部中定義一個表時所用的OCCURS子句中子句中要加上要加上“INDEXED BY 位標名位標名”短語來指定。短語來指定。 01 A. 03 T OCCURS 5 PIC X(2) INDEXED BY I. COBOL語言程序設計語言程序設計2021-12-14說明:說明: (1)由于位標是專門用于引用表元素的特殊數(shù)據(jù)項,它不能)由于位標是專門用于引用表元素的特殊數(shù)據(jù)項,它不能用來進行算術運算。它不是記錄的一部分,不能在數(shù)據(jù)部中用來進行算術運算。它不是記錄的一部分,不能在數(shù)據(jù)部中定義。定義。 (2)一維表或多維表的每一維按需要可以指定若干個位標名,)一維表或多維表的每一維按需
30、要可以指定若干個位標名,引用時這些位標名只能在該維內使用。引用時這些位標名只能在該維內使用。01 A. 02 B OCCURS 5 INDEXED BY B1, B2. 04 C OCCURS 4 INDEXED BY C1, C2.正確引用:正確引用:B(B1),B(B2),C(B1,C1),C(B2,C1) 錯誤引用:錯誤引用:B(C1), C(C1,C2) COBOL語言程序設計語言程序設計2021-12-14(3)有時需要把位標的值轉存到另一個數(shù)據(jù)項中,但)有時需要把位標的值轉存到另一個數(shù)據(jù)項中,但由于位標是特殊類型的數(shù)據(jù)項,因此,需要另外定義由于位標是特殊類型的數(shù)據(jù)項,因此,需要另外
31、定義一種一種特殊的數(shù)據(jù)項叫位標數(shù)據(jù)項特殊的數(shù)據(jù)項叫位標數(shù)據(jù)項,用來專門存儲位標,用來專門存儲位標的值。位標數(shù)據(jù)項在數(shù)據(jù)部中定義。描述位標數(shù)據(jù)項的值。位標數(shù)據(jù)項在數(shù)據(jù)部中定義。描述位標數(shù)據(jù)項用用USAGE子句。例如:子句。例如:77 K USAGE IS INDEX. COBOL語言程序設計語言程序設計2021-12-14SET(設置)語句(設置)語句 1作用:將一表元素的相對地址放到指定的位標去。作用:將一表元素的相對地址放到指定的位標去。 如:如: SET I TO 10. 表示將位標表示將位標I置位到第置位到第10個元素的第一個字節(jié)的相對地址上去。個元素的第一個字節(jié)的相對地址上去。 2格式
32、一格式一 SET 標識符標識符1,標識符,標識符2 TO 標識符標識符3/位標位標3/整數(shù)整數(shù) 位標位標1,位標,位標2 3格式二格式二 SET 位標位標1 ,位標,位標2 UP/DOWN BY 標識符標識符/整數(shù)整數(shù) 作用:給位標所代表的序號增減一個量。作用:給位標所代表的序號增減一個量。 COBOL語言程序設計語言程序設計2021-12-14例:例: 01 A. 02 B OCCURS 10 PIC X(10) INDEXED BY I,J. 02 C OCCURS 10 PIC X(2) INDEXED BY K,L. 1)SET I TO J. J的值直接傳送給的值直接傳送給I. 2)
33、SET J TO 5. (5-1)10=40 J 3) 77 P USAGE IS INDEX. P被定義為位標數(shù)據(jù)項。被定義為位標數(shù)據(jù)項。 SET P TO I. 位標位標I的值直接傳送給的值直接傳送給P。 4) SET J TO P. P的值直接傳送給的值直接傳送給J。 5) SET L TO I. 如如I值為值為90,它表示它表示B表第表第10個表元素(個表元素(90101),再求出再求出C表中第表中第10個元素相對地址個元素相對地址: (10-1)2=18,最最后將后將18 L。 COBOL語言程序設計語言程序設計2021-12-144.使用位標引用表元素的方法使用位標引用表元素的方法
34、一一.使用位標有兩種方法:一是在括號內直接寫位標名:使用位標有兩種方法:一是在括號內直接寫位標名:A(I);二是在括號內寫位標名加或減一個整數(shù),;二是在括號內寫位標名加或減一個整數(shù),A(I+2).二二.位標所代表的出現(xiàn)號不能超過表的相應維的長度。位標所代表的出現(xiàn)號不能超過表的相應維的長度。三三.一個表,不論是否指定位標,都可以使用下標。但一個表,不論是否指定位標,都可以使用下標。但位標不能與下標混用。位標不能與下標混用。四四.位標可以用在位標可以用在IF語句中參加比較。語句中參加比較。 COBOL語言程序設計語言程序設計2021-12-14IDENTIFICATION DIVISION. ID
35、ENTIFICATION DIVISION. PROGRAM-ID. EXAM9A2. PROGRAM-ID. EXAM9A2. ENVIRONMENT DIVISION. ENVIRONMENT DIVISION. DATA DIVISION. DATA DIVISION. 01 T. 01 T. 02 TAB-X OCCURS 5 INDEXED BY TX PIC X. 02 TAB-X OCCURS 5 INDEXED BY TX PIC X. PROCEDURE DIVISION. PROCEDURE DIVISION. MOVE 12345 TO T. MOVE 12345 TO
36、T. PERFORM VARYING TX FROM 1 BY 1 UNTIL TX 5 PERFORM VARYING TX FROM 1 BY 1 UNTIL TX 5 DISPLAY TAB-X (TX) DISPLAY TAB-X (TX) END-PERFORM END-PERFORM STOP RUN. STOP RUN. 示例12345 COBOL語言程序設計語言程序設計2021-12-14IDENTIFICATION DIVISION. IDENTIFICATION DIVISION. PROGRAM-ID. EXAM9A2. PROGRAM-ID. EXAM9A2. ENVI
37、RONMENT DIVISION. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. FILE-CONTROL. SELECT PRINT-FILE ASSIGN TO SYSPRINT. SELECT PRINT-FILE ASSIGN TO SYSPRINT. DATA DIVISION. DATA DIVISION. FILE SECTION. FILE SECTION. FD PRINT-FILE LABEL RECORD IS STANDARD. FD PRINT-FILE
38、LABEL RECORD IS STANDARD. 01 T. 01 T. 02 TAB-X OCCURS 5 INDEXED BY TX PIC X. 02 TAB-X OCCURS 5 INDEXED BY TX PIC X. PROCEDURE DIVISION. PROCEDURE DIVISION. S. OPEN OUTPUT PRINT-FILE. S. OPEN OUTPUT PRINT-FILE. MOVE 12345 TO T. MOVE 12345 TO T. PERFORM VARYING TX FROM 1 BY 1 UNTIL TX 5 PERFORM VARYIN
39、G TX FROM 1 BY 1 UNTIL TX 5 DISPLAY TAB-X (TX) DISPLAY TAB-X (TX) END-PERFORM END-PERFORM WRITE T. WRITE T. CLOSE PRINT-FILE. CLOSE PRINT-FILE. STOP RUN. STOP RUN. 示例1234512345 COBOL語言程序設計語言程序設計2021-12-146.4表的應用表的應用表的檢索表的檢索 1用于順序檢索的用于順序檢索的SEARCH語句語句 格式:格式:SEARCH 表名表名VARYING 位標名位標名1/標識符標識符2AT END 強制語
40、句強制語句1 WHEN 條件條件1 強制語句強制語句2/NEXT SENTENCE WHEN 條件條件2 強制語句強制語句3/NEXT SENTENCESEARCH語句是這樣執(zhí)行的:從指定的表元素開始,檢查是否滿語句是這樣執(zhí)行的:從指定的表元素開始,檢查是否滿足足WHEN后面指定的條件。如不滿足,就使后面指定的條件。如不滿足,就使N(位標)增值,自位標)增值,自動執(zhí)行一個動執(zhí)行一個SET N UP BY 1。使。使N指向下一個元素的地址,指向下一個元素的地址,如果查到某一個元素滿足指定的條件時,查表工作立即停止,如果查到某一個元素滿足指定的條件時,查表工作立即停止,執(zhí)行執(zhí)行WHEN子句中條件后
41、面的語句。子句中條件后面的語句。 COBOL語言程序設計語言程序設計2021-12-14舉例:舉例:SET N TO 1. SEARCH WORKER-TABLE AT END DISPLAYCANNOT FIND NAME WHEN NAME(N)=ZHANG SHENG DISPLAY NAME(N),),PAY(N). 其中其中N必須是位標。必須是位標。 COBOL語言程序設計語言程序設計2021-12-14VARYING可選項有以下幾種情況:可選項有以下幾種情況:1)如果不選此可選項,則表示檢索語句是按定義這個表時所用的)如果不選此可選項,則表示檢索語句是按定義這個表時所用的“INDE
42、XED BY 位標位標1,位標,位標2”中的位標中的位標1來查表的。來查表的。2)如果用)如果用VARYING項,譬如項,譬如VARYING 位標位標2,則按位標,則按位標2來查來查表。在執(zhí)行表。在執(zhí)行SEARCH語句時,每次自動使位標語句時,每次自動使位標2增值,而位標增值,而位標1的值不變。的值不變。3)如果)如果VARYING項后是另外一個表的位標名,如項后是另外一個表的位標名,如VARYING K(K是另一個表的位標),則仍用被查表所指定的第一個位標是另一個表的位標),則仍用被查表所指定的第一個位標1來查表,但被查表的位標來查表,但被查表的位標1增值的同時,增值的同時,K也增值,指向它
43、相關也增值,指向它相關的那個表的下一表元素。的那個表的下一表元素。4) VARYING項后跟的不是位標名,而是普通數(shù)據(jù)項,如項后跟的不是位標名,而是普通數(shù)據(jù)項,如VARYING D(D是普通數(shù)據(jù)項),則仍用被查表所指定的第一是普通數(shù)據(jù)項),則仍用被查表所指定的第一個位標個位標1來查表,但被查表的位標來查表,但被查表的位標1增值的同時,增值的同時,D也增值。它也增值。它的作用是把位標的作用是把位標1所指向的元素的序號保存下來。所指向的元素的序號保存下來。 COBOL語言程序設計語言程序設計2021-12-14綜合示例綜合示例IDENTIFICATION DIVISION. IDENTIFICAT
44、ION DIVISION. PROGRAM-ID. EXAM9A3. PROGRAM-ID. EXAM9A3. ENVIRONMENT DIVISION. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. FILE-CONTROL. SELECT INTAB ASSIGN TO INTABLE. SELECT INTAB ASSIGN TO INTABLE. DATA DIVISION. DATA DIVISION. FILE SECTION. FILE SECTION. FD INT
45、AB LABEL RECORD IS STANDARD. FD INTAB LABEL RECORD IS STANDARD. 01 INTAB-REC PIC X(80). 01 INTAB-REC PIC X(80). WORKING-STORAGE SECTION. WORKING-STORAGE SECTION. 01 WORK-REC. 01 WORK-REC. 02 WORK-TABLE OCCURS 70 TIMES 02 WORK-TABLE OCCURS 70 TIMES INDEXED BY TX. INDEXED BY TX. 04 NUMB PIC 9999. 04 N
46、UMB PIC 9999. 04 BOOK-NAME PIC X(5). 04 BOOK-NAME PIC X(5). 04 FILLER PIC X. 04 FILLER PIC X. 04 NAME PIC XXXX. 04 NAME PIC XXXX. 04 DAT PIC 999. 04 DAT PIC 999. 04 FILLER PIC X(63). 04 FILLER PIC X(63). COBOL語言程序設計語言程序設計2021-12-14PROCEDURE DIVISION. PROCEDURE DIVISION. S. OPEN INPUT INTAB. S. OPEN
47、INPUT INTAB. PERFORM VARYING TX FROM 1 BY 1 UNTIL PERFORM VARYING TX FROM 1 BY 1 UNTIL TX 70TX 70 READ INTAB READ INTAB MOVE INTAB-REC TO WORK-TABLE (TX) MOVE INTAB-REC TO WORK-TABLE (TX) END-PERFORM END-PERFORM CLOSE INTAB. CLOSE INTAB. SET TX TO 1 SET TX TO 1 SEARCH WORK-TABLE AT END DISPLAY SEARC
48、H WORK-TABLE AT END DISPLAY CANNOT FINDCANNOT FIND WHEN NUMB (TX) = 60 WHEN NUMB (TX) = 60 DISPLAY NUMB (TX) DISPLAY NUMB (TX) DISPLAY BOOK-NAME (TX), , DAT DISPLAY BOOK-NAME (TX), , DAT (TX) (TX) END-SEARCH END-SEARCH 綜合示例綜合示例 COBOL語言程序設計語言程序設計2021-12-14示例示例S. OPEN INPUT INTAB. S. OPEN INPUT INTAB.
49、 PERFORM VARYING TX FROM 1 BY 1 UNTIL TX 70 PERFORM VARYING TX FROM 1 BY 1 UNTIL TX 70 READ INTAB READ INTAB MOVE INTAB-REC TO WORK-TABLE (TX) MOVE INTAB-REC TO WORK-TABLE (TX) END-PERFORM END-PERFORM CLOSE INTAB. CLOSE INTAB. PERFORM VARYING TX FROM 1 BY 1 UNTIL TX 70 PERFORM VARYING TX FROM 1 BY 1 UNTIL TX 70 IF NUMB (TX) = 60 IF NUMB (TX) = 60 DISPLAY NUMB (TX) DISPLAY NUMB (TX) DISPLAY BOOK-NAME (TX), , DAT (TX) DISPLAY BOOK-NAME (TX), , DAT (TX) SET TX TO 70 SET TX TO 70 END-IF END-IF END-PERFORM. END-PERFORM. STOP RUN. STOP RUN. COBOL語言程序設計語言程序設計2021-12-14 2用于有序表的用于有序表的SEARCH語句(折
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨平臺整合提高品牌營銷效率的關鍵
- 防火設備的使用及維護超市消防器材培訓重點
- 浙江國企招聘2024嘉興海寧上塘水務有限公司高品質管道飲用水工作辦公室招聘4人筆試參考題庫附帶答案詳解
- 食品藥品行業(yè)行政法規(guī)的嚴格性與透明度
- 高中物理1.2時間位移練習2含解析人教版必修第一冊
- 財務軟件報表制作與數(shù)據(jù)分析技巧
- 金融科技背景下的財務團隊能力提升
- 高效辦公降低血透室并發(fā)癥風險
- 跨區(qū)域醫(yī)療中心信息化建設的經驗分享
- 河南2025年01月2025年河南濮陽市市直機關遴選公務員29人國家公務員考試消息筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 數(shù)字化消防管理解決方案
- 二類汽修廠汽車維修管理新規(guī)制度匯編
- 人教PEP版英語五年級下冊第四單元全部課件
- 硬筆書法 社團教案
- 中國膿毒癥及膿毒性休克急診治療指南
- 工序標準工時及產能計算表
- 人教版體育與健康四年級-《障礙跑》教學設計
- DB32-T 2860-2015散裝液體化學品槽車裝卸安全作業(yè)規(guī)范-(高清現(xiàn)行)
- 福利院裝修改造工程施工組織設計(225頁)
- 部編版六年級下冊語文課后詞語表(拼音)
- 現(xiàn)代寫作教程筆記
評論
0/150
提交評論