2016-11-14 35 views
4

我在我的文件上有一個7位的打包十進制字段。如何定義可提取/分離這7位數字的數據項?從打包十進制字段中拆分數字

例如我想在一個數據項中有前兩位數字,而在另一個數據項中有其他數字,所以我可以在以後處理它們。

+4

@Murad,你將不得不對你的標籤做出選擇。如果JCL是相關的,那麼OpenCOBOL和COBOL.Net就不是。如果OpenCOBOL是相關的,那麼COBOL.Net不是,反之亦然。 –

+0

@穆拉德:如果問題得到解答:請用這種方式標記或提供更多詳細信息 –

回答

5

在其他一些語言中,可能常見的事情之一是「除以10的倍數」,當然是適當的倍數。

但是,不要考慮使用COBOL。 「鴻溝」是「昂貴的」。

 05 input-packed-decimal 
          PACKED-DECIMAL PIC 9(7). 

然後:

 05 FILLER 
      REDEFINES input-packed-decimal. 
      10 ipd-split-two-and-five 
          PACKED-DECIMAL PIC 99V9(5). 

    01 two-digits       PIC 99. 
    01 five-digits       PIC 9(5). 
    01 FILLER 
     REDEFINES five-digits. 
     05 five-digits-as-decimals   PIC V9(5). 

     MOVE ipd-split-two-and-five TO two-digits 
             five-digits-as-decimals 

然後你就可以使用two-digitsfive-digits任何你想要的。

另一種方式:

01 ws-input-seven      PIC 9(7). 
    01 FILLER 
     REDEFINES ws-input-seven. 
     05 two-digits      PIC 99. 
     05 five-digits      PIC 9(5). 

     MOVE input-packed-decimal TO ws-input-seven 

第一種方式還將爲簽訂源領域工作(只是把一個S在適當的地方每個圖片子句中)。

第二個不會使用帶符號的字段,因爲源符號不會傳播到two-digits字段,因爲MOVE甚至不知道有這樣的字段。 (在IBM大型機上,它們也可以具有USAGE COMP-3和COMP/COMP-4/COMP-5)時,請注意REDACKING-PACKED-DECIMAL或BINARY字段。總是在定義相同或相似的USAGE時,定義相同的數字位數。對於REDEFINES字段,編譯器總是會假定你知道你在做什麼,所以它不會爲你做任何「源代碼截斷」。因此,當您使用從屬於REDEFINES的字段時,您必須確保您沒有顯式或隱含地期望截斷源代碼。

要獲得第二位,永遠不要做:

 05 FILLER 
      REDEFINES input-packed-decimal. 
      10 ignore-one-use-2nd-next-five 
          PACKED-DECIMAL PIC 9V9(5). 

要獲得第二位,使用填充DECIMAL PIC 99V9(5)和以前一樣,但定義接收與場只有一個數字位置。編譯器會很高興地生成代碼來完成你期望的截斷。

如果您「無法使用REDEFINES」,則必須在工作存儲中創建一個與輸入字段具有相同特徵的新字段,然後使用該字段。

我在這裏使用的數據名稱僅用於此一般性解釋。使用好的,描述性的名字來完成你的任務。如果前兩位數字是零件類型,最後五位數字是零件號碼,請確保您的命名清晰。

不要將它們命名爲「Var(n)」或類似名稱,不要給它們誤導性的名稱。

0

01陣列。

03 filler pic x(02) value '00'. 

03 filler pic x(02) value '01'. 

03 filler pic x(02) value '02'. 

等等,直到

03 filler pic x(02) value 'FF'. 

01雙陣列重新定義了陣列。

03 harry occurs 256 pic x(02). 

91 sub1。

03 filler pic x(01) value low-values. 

93 sub1-byte2 pic x(01). 

01 sub2重新定義了sub1 comp。

01 pd pic x(04)。

01 pub pub pic 9(04)。

01蛋。

03 eggs1 pic x(01). 

03 eggs2 pic x(01). 

執行由1

變化酒館

從1直到酒館> 4

move pd(pub:1) to sub1-byte2 

move harry(sub2 + 1) to eggs 

display eggs1 egg2 

端執行。

因此,一個256個2字節字段的值爲'00'到'FF'的數組。

通過保存您的壓縮十進制字段的4字節字段。

使用每個字節作爲數組中的下標(加1以確保'00'指向數組中的第一個字段)。

指向的2個字節字段具有表示來自壓縮十進制字段的那個字節的2個半字節的值。

壓縮十進制字段中第四個字節的右側半字節用於符號。

相關問題