你需要定義你的城市表。繼續按照您所展示的風格,這裏有一個VALUE子句的例子。
01 CITY-TABLE.
05 FILLER PIC X(30) VALUE "TOKYO".
05 FILLER PIC X(30) VALUE "KYOTO".
05 FILLER PIC X(30) VALUE "AIZUWAKMATSU".
... another 47 of these
請注意,所有項目必須是相同的長度。 「東京」是五個字符加25個尾隨空格。 「AIZUWAKMATSU」是更多的字符,後面的空格更少,但仍然是30個字節。如果你用不同長度的字段來定義你的城市,你將不能通過「一個數字」來引用它們。
然後,您將需要使用REDEFINES來給出不同的數據映射,在這種情況下給它一個名稱,它可以用於表中的不同事件。
01 FILLER REDEFINES CITY-TABLE.
05 CITY-NAME PIC X(30) OCCURS 50 TIMES.
隨着您定義的數據結構,您可以嘗試使用它。
MOVE "TOKYO" TO CITY-NAME
其實,你不能這樣做。編譯器不會讓你。有50個CITY-NAME元素,編譯器要求您在任何時間使用CITY-NAME時告訴它要使用哪一個。
要訪問表中的元素,您需要使用下標。
下標跟隨其數據名稱(必要時爲「限定」),並括在括號/括號中。
MOVE "TOKYO" TO CITY-NAME (1)
現在編譯。它使用數字整數文字作爲下標。在每種情況下都沒什麼用處,因爲我們經常會「循環」使用表格。
MOVE "TOKYO" TO CITY-NAME (some-name)
這裏some-name
可以是由程序員(作爲數字的整數),或者作爲一個「索引」,數字整數,編譯器將管理定義的數據。
要建立「索引」,您需要在包含OCCURS子句的項目上編寫INDEXED BY some-name。
如果您使用數據名稱作爲下標,它只是一個數據名稱,並且您可以使用的COBOL動詞大部分是無限的。
如果您使用索引名稱(INDEXED BY),則只能使用SET,PERFORM和SEARCH更改索引名稱的值。
PERFORM VARYING some-name FROM 1 BY 1
UNTIL input-byte (some-name) EQUAL TO SPACE
OR some-name GREATER THAN 10
...
END-PERFORM
這不是一個很好的循環,但它是一種讓你開始的東西。
完成後,some-name將爲11(未找到空格)或將其設置爲與數據中第一個空格匹配的表的值。
在上述PERFORM中,some-name可以是索引名稱或數據名稱。結果將是相同的,編譯器產生的結果將會不同。
但是,作爲初學者,您不應該關心將數據名稱用作下標並將索引名稱用作下標。你的結果將是相同的,生成的代碼將會不同。留在那,直到你有更多的經驗。
您可以擁有多維表格。您可以通過正數或負數「抵消」下標。在表演的情況下,下標有一個層次。在你準確地使用「一個比另一個更快」之前,你有很多的理解(你可以輕易地編寫最快的訪問,然後通過以愚蠢的方式執行循環來節省大量的開銷)。還有一個索引數據項。
所有這些東西都可以在以後使用。先走好。
最後的困惑(有很多與下標混淆)是否有引用修改。這看起來有點像使用下標,但不是,但可以用作訪問文本表格的曲折(從稍後理解的角度)。
MOVE "TOKYO" CITY-TABLE (1 : 30)
請注意,正在使用表名而不是輸入名稱。冒號(:)表示它是引用修改。在冒號是開始位置之前,冒號是長度之後。起始位置和長度都可以是數據名稱(但不是索引名稱)。
然而,
MOVE CITY-TABLE (VAR1 : 10)
的參考修改一個典型的草率使用,會使讀者想知道正在使用該數據來完成。
下標項目可以參考修改,但也是爲了以後。
善良,這帶我回來,我建議你看看'發生'條款,這是用來聲明'數組'。這可能是有用的:[2010/01/table-handling.html](http://www.mainframes360.com/2010/01/table-handling.html) –
嘿瑞恩,這似乎正是我正在尋找因爲,我會試一試,非常感謝你! – user3624270
我在鏈接中閱讀的文章越多,我越喜歡它。一般來說,你會從那裏得到重點,但有很多錯誤和混淆。 –