最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

17.13.RPGの基本 o仕様書 その2(数字の編集)

[ Previous ] [ HOME ] [ Upper ] [ Next ]


数字の編集

前回述べたように、数字は編集できます。編集方法は2つあります。「編集コード」と「編集語」です。これらのコードや語を指定すると、数字の中の正負を自動的に判定して、符号をつけてくれます。

編集コード

カンマ(,) ゼロ印刷

負数表示

-(後ろマイナス) 符号なし 浮動負符号(前マイナス) CR
あり あり J 1 N A
あり なし K 2 O B
なし あり L 3 P C
なし なし M 4 Q D

編集コードを指定すると、小数点のピリオドは必ず印刷されます。また、このほかに、日付のスラッシュなどを挿入するY,ゼロ消去のみするZ、なんで有るのか分からないX。

小数点は、もし小数部分だけが有る場合は、整数部分はスペースです。整数部分は2桁以上有る場合は、編集語でカバーできます。

この編集コードは、一文字のコードです。特に日付の Y は必ず使うでしょう。また、数字としては大抵 J になるでしょう。なお、これらの数字の編集語のサンプルはマニュアルを参照してください。

覚え方は、

JKLM、1234、(カンマゼロ)ありあり、ありなし、なしあり、なしなし。

です。

数字の1234は、符号無し、アルファベットJKLMは、符号記号が必ずつきます。符号無しだと、印刷したとき、符号部分の右端が一バイト減ります。なお、CRはCreditのことで、2バイト占有します。会計の数字に有るようですが、帳票の桁数がもったいないので、使っていません。なお、画面ファイルなどの、A仕様書のEDTCDEの編集コードの内容も共通です。(但し、o仕様書では、編集コードで浮動通貨記号は指定できません。この場合は、編集語によります。)

浮動負符号は、割合最近出来たものです。昔はありませんでした。JKLMは「後ろマイナス」に対して、NOPQは「前マイナス」になります。

j =     1,234-

N=   -1,234

の違いです。「普通は、前マイナスじゃないか」と思われるでしょうが、長いこと(System38のころから)、後ろマイナスしかなかったのです。古いパッケージを見れば、だいたいが後ろマイナスのはずです。古い資産と新しい資産が混在すると、マイナスが、「前」「後」と混在してしまうので、「前」は余り使っていません。また、編集語では、サポートされていません

※ 浮動通貨記号の¥の代わりに-が使える「編集語(後述)」を前マイナスの代わりに使った事は、あります。数字の正負をプログラムで判定してから、使う必要があり、とても面倒でした。\記号は、正負無関係に表示してしまうので、マイナスありとなしの2種類を準備して、マイナスの数字ならプラスにして、マイナス記号付きにしていたのです。このやり方は、おすすめできません。古いパッケージで、前マイナスがあったら、この方法を使っているかもしれません。今は、NOPQがやっと出来て、この必要がなくなったのですね。

編集語

※以下の説明で出てくる、___はスペースの事です!桁がわかりやすいので、こうしています。
(実際にコーディングするときは、スペースでしてください。たとえば、'__,___-' は '   ,   -' とします。)

編集語は、編集コードでうまくいかない場合に使います。大抵は、編集コードを使うのですが、以下のようなとき編集語を使います。

ゼロ消去のハンドリングをしたい場合。

実は、小数点以下の数字の場合、編集コードだと、整数部には0が付かず、小数部分に0がつきます。0.00ではなくて、 .00となるのです。この小数点が見づらいので、場合によって、編集語にしています。

00.01を印刷する例

編集コードJの場合= .01

編集語 ’ 0 .  -'の場合=0.01となります。(ただし、整数部が1以下の桁数だと、指定しようが無いですね。.01で我慢しましょう。)

浮動¥記号を指定したい場合。

A仕様書(画面や印刷ファイル)などでは、指定できるのですが、O仕様書では編集コードでは出来ません。

ゼロ消去のスペースの代わりに*を充填する場合。

A仕様書(画面や印刷ファイル)などでは、指定できるのですが、O仕様書では編集コードでは出来ません。

3桁単位の位取り,を変則的に変えたい場合。

もう桁数がどうしても足りない場合の最後の手段です。たとえば、1,234,123,123-ではなく1234,123,123-というようにしてカンマを一つ削り、何とか横の桁数に納めたい場合です。

編集語は、きちんと構造が決まっています。簡単なので覚えてしまいましょう。

AS/400 RPG/400 解説書 資料番号 SC88-5204-00 14.0 第14章 数値フィールドの編集

14.2.2 編集語の各部分より

b b b , b b 0 . b b & C R & & T O T
本体 状況 拡張部分

本体

本体は、原始データ・フィールドから出力レコードに転送される数字用のスペースです。本体は、編集語の左端の桁から始まります。編集語本体のブランク(にゼロを1つまたはアステリスクを1つ加えた)の桁数は、編集する原始データ・フィールドの桁数に等しいか、それより大きくなければなりません。本体は、数字に置き換えることのできる右端の文字で終わります。

状況

状況 は、負の標識用のスペースを定義します。(講師注:後ろだけなので、前マイナスが出来ないことはここで分かりますよね。)負の標識は、2文字のCRまたは負符号(-)のいずれかです。指定した負の標識は、原始データが負の場合にだけ出力されます。編集語の中の最後の置換え可能文字(ブランク、ゼロ消去文字)と負の標識とのあいだのすべての文字も、原始データが負の場合にだけ、負の標識といっしょに出力されます。原始データが正の場合には、これらの状況桁はブランクで置き換えられます。CR または - 標識のない編集語には、状況桁がありません。

状況は、編集語の中の最後のブランクの後に記入しなければなりません。最後のブランクの後に2つ以上の CR が続いている場合には、最初の CR だけが状況として取り扱われ、残りの CRs は固定情報として取り扱われます。 負符号は、編集語中の最後の文字である場合にだけ、状況として扱われます。

拡張部分

拡張部分 は、状況の後に記入する一連のアンパーサンドおよび固定情報文字です。アンパーサンドは出力ではブランク・スペースで置き換えられ、固定情報はそのまま出力されます。状況を指定しない場合には、拡張部分は本体のすぐ後にきます。

編集語の中の&(アンパサンド)は、出力時(編集の後)では、必ずスペースになっています。

編集語のゼロサプレスの簡単な覚え方

とっても、簡単な理屈です。左から、編集語の中を見てゆき、0が見つかったら、その桁を含みゼロを空白にします。その桁の後ろから、0だろうがそれ以外だろうが、必ず印刷するのです。

      0      

ここまではゼロサプレス→

←ここからは、必ず印刷

たとえば、変な例ですが、'___,0__._-'の場合、__1,234.0_とか、_____01.5_ と印刷されます。極端な話し、'0_,___,___-'だと、_0,000,001_とでるのです。

但し、'__,___,___-'だと、0は全く印刷しません。また、小数点があるときは、注意しましょう。'___,___.__'としてしまうと、0.12は、ただ、_______12 と印刷され、小数点が出ないために、整数の12の様に見られます。(これは、そのプログラムにバグがあることになります。)この場合、'___,_0_.__-'とすれば、_______0.12_ と表示されます。(編集コードだと、_______.12_とでます。

もし、チャンスが有れば、いろいろ試してみてください。

0の時はなにも印刷しないで、0.12は .12と印刷する、編集コードKやMは編集語ではうまくできませんね。編集語だと、'__,___.0_-'とするので、すべて0の時、必ず、______.00-と表示してしまい、すべてスペースに出来ません。(まあ、標識で切り分ければ、出来るのですが。これでは、ひねくれ者です。)また、編集コードのNOPQのような、前マイナスは出来ません。

簡単な具体例は、

もし、帳票設計上で、  ZZ,ZZ9.99-となっていたら、'__,_0_.__-'です。ZZ,ZZZ.99-'ならば、'__,__0.__-'です。よく見てください。小数点の前に一個スペース+0があるか、すぐに左に0が有るかの違いです。また、マイナス記号の前に一個スペースを入れたければ、'   , 0 .  &-'となります。でも桁数がもったいないので、あまり使ったこと有りません。

コーディング例

     O******************************************************
     O*             O U T P U T   M O D U L E              *
     O******************************************************
     OQPRT198 E  101           #HED
     O                         O1USID    18
     O                         UDATE Y  132
     O*
     O        E  1             #HED
     O                         O1JBID    18
     O                         DSQTIM   132 '0 :  :  ' 

注目して欲しいのは、UDATEの後のYと、DSQTIMの右横の'0_:__:__'です。Yは、H仕様書の日付の編集の指定に関連しますが、

     H            Y/                                                        

と指定されていると、YMD形式で日付のセパレータは/ですよ、と言っているわけです。これで、O仕様書で、UDATE Yとすると、98/11/25などと印刷されるわけです。

DSQTIMでは編集語を指定していますね。もし、'__:__:__'だと、まずいことがあります。さあ、何でしょう?そう、時間が、00:00:00のとき、これでは、なにも印刷されませんね。(スペースが8個並ぶだけ)。よって、'0_:__:__'が正しいことになります。これで、_0:00:00と印刷されます。'__/__/__' と '0_/__/__' も同じ事が言えます。

日付も、'____/__/__'では、00000000の時になにも表示しませんが、たとえば、データ入力の内容の印刷などでは、未入力の日付を印刷するとき、この方が見やすい場合もありますね。どちらが良いのかは、あなたが決めることなのですよ。_000/00/00がいいか、__________がいいかということです。

1998/10/10追記

注意:

もし、日付を、98/01/01の様に、年2桁にする場合、編集語'__/__/__'では、問題があります。2000年になると、000101となるのですが、このときの表示は、'___1/01'となり、まるで年が無いかのような表示になります。00年なので、表示が抑制されてしまうのです。(2001年には、この問題は解消されますが...)。年2桁の日付を表示する場合は、いずれ説明する「標識」なるものを使って、00/00/00(未入力)を表示しないようにしましょう。また、年を4桁にする場合、20000101は'____/__/__'でも、きちんと2000/01/01と表示されるので、心配有りません。

この件の追記とともに、上記の解説内の部分を、年2桁から年4桁の説明に変更しました。赤い文字で、注意を促しました。

 

尚、老婆心ながら、

文字フィールドに、数字編集コードを指定すると、コンパイルエラー。編集語と編集コードを両方指定してもエラー。さらに、数字が5桁なのに、編集語で、'_'がそれ以下のスペースを取るようならば、それもエラーです。厳格に検査されていますね。

次回は、ゾーン数字やパック数字、それから、漢字の扱いを説明します。

今日はここまで。起立、礼、着席

1998/8/22


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送