我一直坚持这个问题一段时间了。非常感谢帮助。
我从一个文件中读取了一个4位数字,我需要取两个内部数字。 我认为以字符串形式读取数字是一个好主意,然后在子字符串中取两个中间数字并使用numval函数将它们转换回来。不幸的是,我无法弄清楚如何获得内部两个字符。
实施例。 我有5465号,我想要46号。
答案 0 :(得分:5)
Keith Thompson的建议会很好。您可能想检查我> 0和J>如果你总是知道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 :(得分:5)
您可以使用参考修改。请考虑以下事项:
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),第二个数字表示长度。
答案 2 :(得分:3)
如果你把它作为一个数字而不是一个字符串,你可以用算术来做。鉴于I
为5465
,并且您希望将46
存储在J
中:
DIVIDE I BY 10 GIVING J.
DIVIDE J BY 100 GIVING ignored REMAINDER J.
答案 3 :(得分:0)
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
或 无论何处
,都要移动一小段数据是否有签名号码并希望保留该标志?
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