如何從Cobol的抄寫本創建表格?從抄寫本創建Cobol表?
副本有幾個組,只需要其中的一個在表中。
我是否需要多次使用抄寫本來替換變量的開始,以便編譯器將它們視爲不同的東西?
只要使用它的其他程序會編譯,我就可以編輯該副本。
它位於IBM大型機上。
查看我的答案,下面是我的最終解決方案。感謝@布魯斯·馬丁
如何從Cobol的抄寫本創建表格?從抄寫本創建Cobol表?
副本有幾個組,只需要其中的一個在表中。
我是否需要多次使用抄寫本來替換變量的開始,以便編譯器將它們視爲不同的東西?
只要使用它的其他程序會編譯,我就可以編輯該副本。
它位於IBM大型機上。
查看我的答案,下面是我的最終解決方案。感謝@布魯斯·馬丁
的IBM的大型機支持嵌套習字,所以你可以在
所以
你的字帖更改爲 嵌套字帖也可以看看
01 record-layout-1.
...
01 record-layout-2.
...
01 record-layout-3.
...
可改爲
01 record-layout-1.
...
01 record-layout-2.
...
01 record-layout-3.
copy newCopy.
...
,並在你的程序,你可以使用NEWCOPY或者你叫它什麼都。你可能會想在重新編號的同時重新編號。
所以,如果原來的字帖是
01 record-layout-3.
05 field-1 pic x(4).
05 field-2 ...
您將創建新的字帖作爲
25 field-1 pic x(4).
25 field-2 ...
實際水平的數字並不重要,他們只需要爲> 01的字帖。使用25將可以很容易地嵌入您的工作存儲。
有幾家公司使它成爲標準副本不能包含01級別,因此副本也可以嵌入到工作存儲中。這是罕見的,雖然
您可以使用Replace與嵌套副本嗎? – zurbergram
不,不在副本中,您需要在主程序中使用replace指令。請參閱我的回答中指出的問題中的答案 –
您提供的鏈接實際上顯示瞭如何在副本中使用Replace塊 – zurbergram
你說你不能改變抄寫本。那麼,副本可以改變,它不會影響其他任何東西。
這是從企業COBOL語言參考的例子:更換
Example 3
If the following conventions are followed in library text, then parts of names (for
example the prefix portion of data names) can be changed with the REPLACING
phrase.
In this example, the library text PAYLIB consists of the following data division
entries:
01 :TAG:.
02 :TAG:-WEEK PIC S99.
02 :TAG:-GROSS-PAY PIC S9(5)V99.
02 :TAG:-HOURS PIC S999 OCCURS 1 TO 52 TIMES
DEPENDING ON :TAG:-WEEK OF :TAG:.
The programmer can use the COPY statement in the data division of a program as
follows:
COPY PAYLIB REPLACING ==:TAG:== BY ==Payroll==.
Usage Note: It is important to notice in this example the required use of colons or
parentheses as delimiters in the library text. Colons are recommended for clarity
because parentheses can be used for a subscript, for instance in referencing a table
element.
In this program, the library text is copied; the resulting text is treated as if it had
been written as follows:
01 PAYROLL.
02 PAYROLL-WEEK PIC S99.
02 PAYROLL-GROSS-PAY PIC S9(5)V99.
02 PAYROLL-HOURS PIC S999 OCCURS 1 TO 52 TIMES
DEPENDING ON PAYROLL-WEEK OF PAYROLL.
The changes shown are made only for this program. The text, as it appears in the
library, remains unchanged.
因此,對於01現有的字帖中,您可以用副本替換01後的數據定義... .. 。給出相同的前綴(假設數據名稱的前綴爲....),然後根據需要創建新的調整級別數字的副本(例如,示例顯示級別數字02,這總是愚蠢的,但這可能不是世界上唯一的例子)。不同級別的數字不會影響任何現有的代碼(因爲無論如何編譯器會將所有級別數字均等化,因此編譯器將始終將01之後的級別的數字視爲02,將次數最低的視爲03等)。
然後,您可以在您的表格中使用新的字帖。
請注意,您將不得不使用下標來引用表中的任何字段。
如果你真的不能改變字帖(有些奇怪的diktat,有時會發生),那麼最好的辦法是製作一個新的字帖,它是相同的,但有不同的前綴,沒有01級別,靈活性。
我們現在需要存儲記錄的目的。
看來你有這樣的事情:
copy reclyout.
01 record-layout-1.
...
01 record-layout-2.
...
01 record-layout-3.
...
有了這樣的,要存儲的記錄佈局-2的記錄,只在一個表中。
正如布魯斯馬丁所問,知道你使用的編譯器和操作系統是否有用。一些(而不是全部)COBOL編譯器支持嵌套複製語句。您可以用包含佈局的新副本的copy
聲明替換原始副本中的記錄佈局。
你會遇到一個小問題,你需要01本身以外的副本,並且你需要在關卡號碼之間留出足夠的空白,以允許你的表格定義包括新的抄本。在字帖
01 The-Table.
05 some-name OCCURS 100 TIMES.
copy newlyout.
最高級別的數據定義(一個或多個)將不得不開始與電平數超過05.更大這不是太大的問題來實現。無論如何,COBOL編譯器都會「規範化」關卡數量,而這樣做的可能性幾乎爲零。如果你的編譯器支持嵌套的複製語句,這是你的最佳解決方案。
是的,使用COPY和REPLACING將會非常有用。必須使用數據名稱(或標籤)的限定總是很難看。
如果不是,請考慮做同樣的事情,但要從現有的副本中刪除特定的佈局,並在原始副本聲明後簡單包括新的副本。你是否能夠做到這一點將取決於在其他地方使用該副本。把它交給你的分析師/老闆。
如果這是不可能的話,爲該表製作一個新的副本,並使用可用的註釋和其他文檔來建立兩個數據定義之間的關係。不理想,但它是一種常見的方式。
另一種可能性是簡單地定義表格中的區域,並使用記錄佈局,通過MOVE
記錄佈局。這是另一種常見的方式,它需要記錄和檢查表格/記錄佈局中的長度,並且是一種糟糕/低效率的方式。再一次,你可能會遇到這種情況。
如果你在編譯器/ OS上咳嗽,還有其他一些方法。
我最終的解決方案。
我真的結束了,不必從副本創建表,但仍然需要01組變量作爲自己的副本,以創建具有相同結構的變量的多個實例,只需使用不同的01組名和變量名。
我最終創建了01組變量的個人抄本書籍,然後使用Replace塊使嵌套抄本看起來像原文。請參閱下面的最終結果。
REPLACE ==(TAGEIGHT)== BY ==N==.
01 STD-NACHA-FILE-HEADER.
COPY ABRYNAFH.
01 STD-NACHA-BATCH-HEADER.
COPY ABRYNABH.
01 STD-NACHA-DETAIL-TRANS.
COPY ABRYNADT.
01 STD-NACHA-DETAIL-ADDENDA-REC.
COPY ABRYNADA.
01 STD-NACHA-BATCH-TOTAL-REC.
COPY ABRYNABT.
01 STD-NACHA-FILE-TOTAL-REC.
COPY ABRYNAFT.
01 STD-NACHA-FILE-PAD-REC.
COPY ABRYNAFP.
01 STD-NACHA-RETURN-REC.
COPY ABRYNARR.
REPLACE OFF.
你的問題不能正確除非您提供的字帖,告訴你要確切地替換一下回答。 – NoChance
@BillWoodger是 – zurbergram
@EmmadKareem你錯過了我想要使用多個01組的副本,但我只需要其中一個組在表中有多個實例 – zurbergram