数値→文字列変換

概要

数値を文字列化して、カンマ区切りやゼロパディングを指定して変数に入れる方法です。


%CHAR関数

[一般形式]

%CHAR (値)

%CHAR関数は、先頭のゼロは除去され前詰めされますが、カンマ区切りで整形されるわけではありません。

              
DNAME+++++++++++ETDSFROM+++TO/L+++IDC.KEYWORDS+++++++++++++++++++++++++++++
D AMOUNT     S       9 0 INZ(16384)
D MESSAGE     S       32  INZ('')
D
CL0N01FACTOR1+++++++OPCODE&EXTFACTOR2+++++++RESULT++++++++LEN++D+HILOEQ....
C          EVAL    MESSAGE = %CHAR(AMOUNT) + ' 円 '
C   MESSAGE    DSPLY
C*16384 円 
              
            


%EDITW関数

[一般形式]

%EDITW (表示形式

%EDITW関数は、D仕様書の宣言タイプC(固定情報定義)で指定した書式で変換します。
書式でカンマ区切りや符号を定義すれば、その通り出力されます。ただしゼロパディングや前詰めはされませんが、任意の位置の置換可能文字に ゼロ制御解除 を指定することで指定桁から右側の桁は先頭ゼロであっても数値が表示されます。

              
DNAME+++++++++++ETDSFROM+++TO/L+++IDC.KEYWORDS+++++++++++++++++++++++++++++
D AMOUNT     S       9 0 INZ(16384)
D TIME      S       4 0 INZ(915)
D ZERO      S       3 0 INZ(0)
D COUNT      S       3 0 INZ(16)
D MESSAGE     S       32  INZ('')
D*
D FOTMAT1     C          '  ,  ,  '
D FOTMAT2     C          ' : '
D FOTMAT3     C          ' 0 '
D
CL0N01FACTOR1+++++++OPCODE&EXTFACTOR2+++++++RESULT++++++++LEN++D+HILOEQ....
C          EVAL    MESSAGE = %EDITW(AMOUNT:FORMAT1) + ' 円です。 '
C   MESSAGE    DSPLY
C*   16,384 円です。
C
C          EVAL    MESSAGE = %EDITW(TIME:FORMAT2)
C   MESSAGE    DSPLY
C* 9:15
C
C          EVAL    MESSAGE = %EDITW(COUNT:FORMAT3) + ' 件処理しました。 '
C   MESSAGE    DSPLY
C* 16 件処理しました。
C
C          EVAL    MESSAGE = %EDITW(ZERO:FORMAT3) + ' 件処理しました。 '
C   MESSAGE    DSPLY
C* 0 件処理しました。
              
            
注意

D仕様書の宣言タイプCで宣言した書式 の置換可能文字数と値の桁数は一致する必要があります。

4桁の変数指定してを " 0 " のように3桁しか置換可能文字数の無い書式を指定できません。 ※実行時エラー


%EDITC関数

[一般形式]

%EDITC (編集コード {: オプション})

%EDITC関数では、指定した 編集コード任意のオプション に従って編集します。
 ゼロ制御とは有効桁より先頭のゼロをブランクに置き換える事を指します。
編集コード 'X' は MOVE と同じ結果になる為、通常は指定する必要がありません。

[編集コード]

編集内容 [符号無] [Cr符号] [-符号R] [-符号L]
カンマ区切り・ゼロ制御 1 A J N
カンマ区切り 2 B K O
ゼロ制御 3 C L P
なし 4 D M Q
16進F符号 X
日付変換 Y
ゼロ制御 Z

[オプション]
 ・*ASTFILL:アスタリスク保護
 ・*CURSYM:制御仕様書に指定した記号の表示(省略値は$)
 ・任意の記号:1バイトの通貨記号を表示

              
H*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
H CURSYM('\')
H
DNAME+++++++++++ETDSFROM+++TO/L+++IDC.KEYWORDS+++++++++++++++++++++++++++++
D AMOUNT1     S       9 0 INZ(16384)
D AMOUNT2     S       9 0 INZ(-8192)
D COUNT      S       3 0 INZ(12)
D YMD       S       8 0 INZ(20250707)
D MESSAGE     S       32  INZ('')
D
CL0N01FACTOR1+++++++OPCODE&EXTFACTOR2+++++++RESULT++++++++LEN++D+HILOEQ....
C          EVAL    MESSAGE = %EDITC(AMOUNT1:'4') + ' 円です。 '
C   MESSAGE    DSPLY
C*000016384 円です。
C
C          EVAL    MESSAGE = %EDITC(AMOUNT2:'N') + ' 円です。 '
C   MESSAGE    DSPLY
C*   -8,192 円です。
C
C          EVAL    MESSAGE = %EDITC(AMOUNT2:'A') + ' 円です。 '
C   MESSAGE    DSPLY
C*   8,192CR 円です。
C
C          EVAL    MESSAGE = %EDITC(YMD:'Y')
C   MESSAGE    DSPLY
C*2025/7/7
C
C          EVAL    MESSAGE = %EDITC(AMOUNT2:'N':*ASTFILL) + ' 円 '
C   MESSAGE    DSPLY
C******-8,192 円
C
C          EVAL    MESSAGE = %EDITC(AMOUNT1:'N':*CURSYM)
C   MESSAGE    DSPLY
C*\  16,384
C
C          EVAL    MESSAGE = %EDITC(COUNT:'4':'E')
C   MESSAGE    DSPLY
C*E012