1

私はしばらくの間この問題に固執しています。助けていただければ幸いです。

ファイルから4桁の数字を読み込んでいますが、内側の2桁を取得する必要があります。数値を文字列として読み込むのは良い考えだと思いました。次に、部分文字列の真ん中の2桁を取り、numval関数を使用してそれらを元に戻します。残念ながら、中の2文字を取得する方法がわかりません。

元。私は番号5465を持っています、私は46を取得したいです。

4

4 に答える 4

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 番目の数字は長さを示します。

于 2012-12-17T01:11:43.943 に答える
5

Keith Thompson が提案するものは問題なく機能します。I > 0 および J > 0 であることを確認したい場合があります。常に 1000 <= I <= 9999 であることがわかっている場合は問題ありません。

IBM Enterprise COBOL にはMOD 関数が含まれていますが、これはコンパイラーで使用できる場合と使用できない場合があります。

次のこともできると思います...

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.

これは、0 <= your-number <= 9999 の場合、your-number が COMP または COMP-3 として定義されているかどうかにかかわらず機能するはずです。

于 2012-12-16T05:08:01.050 に答える
3

文字列ではなく数値として持っている場合は、算術的に行うことができます。が でIあり、 に保存し5465たい場合:46J

DIVIDE I BY 10 GIVING J.
DIVIDE J BY 100 GIVING ignored REMAINDER J.
于 2012-12-16T02:59:05.940 に答える
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

または MOVE a-short-piece-of-data TO どこでも

署名された番号を持っていて、署名を保持したいですか?

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
于 2012-12-24T19:07:18.003 に答える