EDTCDEについて

おはようございます。皆さんはIBMiを使っていますでしょうか?
日々の保守や開発でDSPFやPRTFのソースを見ていると、EDTCDEというキーワード目にすることがあると思います。
EDTCDEとは、数値の表示を自動で整える(桁区切り、符号の表し方、ゼロの扱い)ための機能です。
今回はEDTCDEの有無による見え方の違い、および編集コードの使い分けを出来るだけわかりやすく紹介します。
まずは見た目の違いを確認してみましょう。
画面に数値をただ表示するとこのようになります。
……何桁あるか解り辛いですよね?
そこで試しにEDTCDE(1)を付けてみるとこのようになります。
桁区切りや小数点が自動で入り、とても見やすくなりました。
表示していたのは小数込みの数値だったようです。
どちらも同じ桁数・小数桁の同じ値ですが、見やすさが大きく変わることが分かります。
それではEDTCDEの凄みが実感出来たところで、次のステップに進みます。
先程の例ではEDTCDE(1)と設定していましたが、(1)の部分って何?というお話になります。
( )の中の値は編集コードと言い、数値項目をどんな風に表示させるかを指定することができます。
早速編集コードの一覧を見てみましょう。
編集コード
大きく分けるとマイナスの時にどう表示するかで、
後はカンマの有無とゼロの時の表示の有無で4パターンずつに分かれているだけです。
1–4 : 符号なし(マイナスでも記号を出さない)
A–D : “CR”
J–M : 後置 “-”
N–Q : 前置 “-”
(1)(A)(J)(N): カンマあり/ゼロ表示あり
(2)(B)(K)(O): カンマあり/ゼロ表示なし
(3)(C)(L)(P): カンマなし/ゼロ表示あり
(4)(D)(M)(Q): カンマなし/ゼロ表示なし
小数込みの項目には必ず小数点が付与されます。
先頭の0は除去されます。数値として意味がないためです。
ゼロのみの表示は小数込みの場合「.00」、少数がない場合「0」となります。
実際にどう表示されるか実験をしてみました。
まずはEDTCDEを付けないで表示させたもの
マイナス値がセットされている所の最下位桁が「M」や「O」と表示されているのにお気づきでしょうか。
これは文字化けを起きているわけではなく、符号をオーバーパンチしているからです。
※見辛いですが「6」の所は「0(ゼロ)」ではなく、「O(オー)」に変換されています。
ゾーン10進数でプラスは「F」(もしくは「C」)、マイナスは「D」と表現します。
例えば「+1234」なら「F1F2F3F4」、「-1234」なら「F1F2F3D4」といった感じです。
着目してほしいのはマイナスの方の最下位桁ゾーンの「D4」の部分です。
ここでIBMiの文字コード(EBCDIC)を見てみると
「D4」にあたる文字は「M」となっていますね。「M」…はて、どこかで見たような…?
そうです。これがオーバーパンチの仕組みになります。
「6」が「O」になっているのも、「D6」にあたる文字が「O」になってるからです。
EDTCDEから話が逸れてしまいました。本題に戻ります。
マイナスの値でも特に何もつけない4セット
続いてマイナスの時に「CR」と付ける4セット
ここでついている「CR」というのは会心率のことではなく
貸方「Credit」の略称で「CR」と付けています。
会計表記では昔から「マイナス金額=貸方=CR」と表す慣習があるそうです。
そうなるとプラスの方は借方「Debit」となりそうですが、DEが付くことはありません。
続いて後ろに-を付ける4セット
続いて前に-を付ける4セット
最後に、EDTCDEについての補足として
実装時は、区切り記号や符号の幅も見越してフィールド長を確保するように気を付けましょう。
桁数は問題ないがEDTCDEを付けたことによって桁数が増え、後続のフィールドに被って見えなくなったという事が発生します。
EDTCDE毎の桁数を見ると、かなり違うことが分かると思います。
編集コードは覚えるに越したことはないですが、無理に覚えなくてもよいと思います。
メモを取るなり、ここを再度見に来たり、手元にチートシート化しておくと保守も実装もより速くなると思います。






















