我一直在這個問題上停留了一段時間。幫助將不勝感激。Cobol子串;採取4個字符的字符串,並採取內部2個字符
我有一個4位數字從文件讀入,我需要採取內部2位數字。 我認爲以字符串的形式讀取數字將是一個好主意,然後在子字符串中取兩個中間數字並使用numval函數將其轉換回來。不幸的是,我無法弄清楚如何獲得裏面的兩個字符。
Ex。 我有號碼5465,我想得到46.
我一直在這個問題上停留了一段時間。幫助將不勝感激。Cobol子串;採取4個字符的字符串,並採取內部2個字符
我有一個4位數字從文件讀入,我需要採取內部2位數字。 我認爲以字符串的形式讀取數字將是一個好主意,然後在子字符串中取兩個中間數字並使用numval函數將其轉換回來。不幸的是,我無法弄清楚如何獲得裏面的兩個字符。
Ex。 我有號碼5465,我想得到46.
如果你把它作爲一個數字而不是一個字符串,你可以算術地做。鑑於I
爲5465
,並要存儲在46
J
:
DIVIDE I BY 10 GIVING J.
DIVIDE J BY 100 GIVING ignored REMAINDER J.
我不敢相信我正在回答COBOL問題。 8)}如果有更清晰的方法來計算餘數(在其他語言中爲'mod'或'%'運算符),我很樂意看到它。 –
什麼基思·湯普森建議將正常工作。您可能需要檢查I> 0和J> 0.如果您始終知道總是1000 < = I < = 9999,那麼這不會成爲問題。
IBM Enterprise COBOL包含一個MOD function,它可能或可能不適用於您的編譯器。
我想你也可以做到以下幾點...
01 A-GROUP.
05 A-NUMBER PIC 9999 VALUE ZEROES.
05 A-STRING REDEFINES A-NUMBER.
10 FILLER PIC X.
10 THE-MIDDLE-TWO-DIGITS PIC XX.
10 FILLER PIC X.
MOVE your-number TO A-NUMBER.
這應該工作,你的號碼是否被定義爲COMP或COMP-3,只要0 < =您的號碼< = 9999
您可以使用參考修改。考慮以下內容:
1 WS-MY-FIELD Pic X(4).
1 WS-TGT-FIELD Pic X(2).
...
Move WS-MY-FIELD (2:2) to WS-TGT-FIELD
第一個數字表示開始位置(基於1),第二個數字表示長度。
01 a-long-piece-of-data.
05 the-first-character pic x.
05 the-two-characters-we-want pic xx.
05 the-last-character pic x.
01 a-short-piece-of-data pic xx.
01 filler redefines a-short-piece-of-data.
05 a-short-unsigned-number pic 99.
MOVE the-two-characters-we-want TO a-short-piece-of-data
MOVE/ADD/COMPUTE/whatever a-short-unsigned-number
或 MOVE到哪裏
有一個簽名的數量和要保留的符號的短片-的數據?
01 a-long-number PIC S9(4).
01 FILLER REDEFINES a-long-number.
05 FILLER PIC X.
05 an-integer-with-one-decimal-place PIC S99V9.
01 a-short-number-no-decimals PIC S99.
MOVE an-integer-with-one-decimal-place TO a-short-number-no-decimals
這有幫助嗎? http://stackoverflow.com/questions/8208111/substring-for-a-string-literal-in-cobol – Almo
我的COBOL是生鏽的,但除了上述另一種方式將是有一個記錄,其中包含兩個PIC 9 2)數據類型。 – PeterJ