17.13.RPGの基本 o仕様書 その2(数字の編集) |
数字の編集前回述べたように、数字は編集できます。編集方法は2つあります。「編集コード」と「編集語」です。これらのコードや語を指定すると、数字の中の正負を自動的に判定して、符号をつけてくれます。 編集コード
編集コードを指定すると、小数点のピリオドは必ず印刷されます。また、このほかに、日付のスラッシュなどを挿入するY,ゼロ消去のみするZ、なんで有るのか分からないX。 小数点は、もし小数部分だけが有る場合は、整数部分はスペースです。整数部分は2桁以上有る場合は、編集語でカバーできます。 この編集コードは、一文字のコードです。特に日付の Y は必ず使うでしょう。また、数字としては大抵 J になるでしょう。なお、これらの数字の編集語のサンプルはマニュアルを参照してください。
数字の1234は、符号無し、アルファベットJKLMは、符号記号が必ずつきます。符号無しだと、印刷したとき、符号部分の右端が一バイト減ります。なお、CRはCreditのことで、2バイト占有します。会計の数字に有るようですが、帳票の桁数がもったいないので、使っていません。なお、画面ファイルなどの、A仕様書のEDTCDEの編集コードの内容も共通です。(但し、o仕様書では、編集コードで浮動通貨記号は指定できません。この場合は、編集語によります。) 浮動負符号は、割合最近出来たものです。昔はありませんでした。JKLMは「後ろマイナス」に対して、NOPQは「前マイナス」になります。
の違いです。「普通は、前マイナスじゃないか」と思われるでしょうが、長いこと(System38のころから)、後ろマイナスしかなかったのです。古いパッケージを見れば、だいたいが後ろマイナスのはずです。古い資産と新しい資産が混在すると、マイナスが、「前」「後」と混在してしまうので、「前」は余り使っていません。また、編集語では、サポートされていません。 ※ 浮動通貨記号の¥の代わりに-が使える「編集語(後述)」を前マイナスの代わりに使った事は、あります。数字の正負をプログラムで判定してから、使う必要があり、とても面倒でした。\記号は、正負無関係に表示してしまうので、マイナスありとなしの2種類を準備して、マイナスの数字ならプラスにして、マイナス記号付きにしていたのです。このやり方は、おすすめできません。古いパッケージで、前マイナスがあったら、この方法を使っているかもしれません。今は、NOPQがやっと出来て、この必要がなくなったのですね。 編集語※以下の説明で出てくる、___はスペースの事です!桁がわかりやすいので、こうしています。 編集語は、編集コードでうまくいかない場合に使います。大抵は、編集コードを使うのですが、以下のようなとき編集語を使います。
編集語は、きちんと構造が決まっています。簡単なので覚えてしまいましょう。 AS/400 RPG/400 解説書 資料番号 SC88-5204-00 14.0 第14章 数値フィールドの編集14.2.2 編集語の各部分より
編集語の中の&(アンパサンド)は、出力時(編集の後)では、必ずスペースになっています。 編集語のゼロサプレスの簡単な覚え方とっても、簡単な理屈です。左から、編集語の中を見てゆき、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がいいか、__________がいいかということです。
尚、老婆心ながら、 文字フィールドに、数字編集コードを指定すると、コンパイルエラー。編集語と編集コードを両方指定してもエラー。さらに、数字が5桁なのに、編集語で、'_'がそれ以下のスペースを取るようならば、それもエラーです。厳格に検査されていますね。 次回は、ゾーン数字やパック数字、それから、漢字の扱いを説明します。 今日はここまで。起立、礼、着席 1998/8/22 |
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||