【COBOL 読み1-5】妖精とたぬきが変数づくり〜9やらZやらVやら

今回のコード

 *> --- 現在日時(レポートヘッダに使用) ---
       01  CDATE.
           05  CD-RAW                  PIC X(21).
           05  CD-YYYY                 PIC 9(4).
           05  CD-MM                   PIC 9(2).
           05  CD-DD                   PIC 9(2).
           05  CD-HH                   PIC 9(2).
           05  CD-MN                   PIC 9(2).
           05  CD-SS                   PIC 9(2).

       *> --- CSV項目(文字) ---
       01  CSV.
           05  F-ORDER-DATE-A          PIC X(10).  *> YYYY-MM-DD
           05  F-ORDER-ID-A            PIC X(30).
           05  F-BUYER-A               PIC X(40).
           05  F-SKU-A                 PIC X(30).
           05  F-QUANTITY-A            PIC X(12).
           05  F-UNIT-PRICE-A          PIC X(18).
           05  F-TAX-RATE-A            PIC X(10).  *> 0.1 = 10%
           05  F-COUNTRY-A             PIC X(10).

       *> --- 数値化後項目 ---
       01  NUM.
           05  N-QUANTITY              PIC 9(7)        VALUE 0.
           05  N-UNIT-PRICE            PIC 9(9)V99     VALUE 0.
           05  N-TAX-RATE              PIC 9V999       VALUE 0.
           05  N-LINE-NET              PIC 9(11)V99    VALUE 0.
           05  N-LINE-TAX              PIC 9(11)V99    VALUE 0.
           05  N-LINE-GROSS            PIC 9(11)V99    VALUE 0.

       *> --- トータル ---
       01  TALLY.
           05  TOT-RECORDS             PIC 9(9)        VALUE 0.
           05  TOT-OK                  PIC 9(9)        VALUE 0.
           05  TOT-ERR                 PIC 9(9)        VALUE 0.
           05  SUM-NET                 PIC 9(13)V99    VALUE 0.
           05  SUM-TAX                 PIC 9(13)V99    VALUE 0.
           05  SUM-GROSS               PIC 9(13)V99    VALUE 0.

       *> --- 国別サマリ(最大50種) ---
       01  COUNTRY-TABLE.
           05  CT-ENTRY OCCURS 50 TIMES INDEXED BY CT-IX.
               10 CT-COUNTRY          PIC X(2)     VALUE SPACES.
               10 CT-COUNT            PIC 9(7)     VALUE 0.
               10 CT-SUM-GROSS        PIC 9(13)V99 VALUE 0.

       *> --- 編集表示用 ---
       01  EDIT.
           05  E-SUM-NET               PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-SUM-TAX               PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-SUM-GROSS             PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-COUNTRY-GROSS         PIC Z,ZZZ,ZZZ,ZZ9.99.

       *> --- バリデーション用 ---
       01  CNT-ALPHA                   PIC 9(4).
       01  CNT-BLANK                   PIC 9(4).
目次

もう俺に死角はない!

       *> --- 現在日時(レポートヘッダに使用) ---
       01  CDATE.
           05  CD-RAW                  PIC X(21).
           05  CD-YYYY                 PIC 9(4).
           05  CD-MM                   PIC 9(2).
           05  CD-DD                   PIC 9(2).
           05  CD-HH                   PIC 9(2).
           05  CD-MN                   PIC 9(2).
           05  CD-SS                   PIC 9(2).

01で大きな箱作って、05でその中の小さな中にそれぞれの箱を作る。

CD-RAW

もうCDとかキャッシュディスペンサーとか言わない。
そんな恥ずかしいことを言うやつはいない。

生データを入れる箱、ってとこかな。今の時間だろう。

CD-YYYY

年の箱作って、あとは、月、日、時間、分、秒をそれぞれ作っていくと。

       *> --- CSV項目(文字) ---
       01  CSV.
           05  F-ORDER-DATE-A          PIC X(10).  *> YYYY-MM-DD
           05  F-ORDER-ID-A            PIC X(30).
           05  F-BUYER-A               PIC X(40).
           05  F-SKU-A                 PIC X(30).
           05  F-QUANTITY-A            PIC X(12).
           05  F-UNIT-PRICE-A          PIC X(18).
           05  F-TAX-RATE-A            PIC X(10).  *> 0.1 = 10%
           05  F-COUNTRY-A             PIC X(10).

これはcsvに入れ込む項目の設定という感じだろうな。

YYYY-MM-DD

こういう感じで登録すると。

 05  F-TAX-RATE-A            PIC X(10).  *> 0.1 = 10%

ほーほー。
税率は10%つまりは、0.1と小数点扱いにしておけばいいということだろう。

でも、FとAってなんだよ…ここに書いてあるんだから、勝手につけただけ?なんかいみあるんだろうな。

係長)んー?
Fはフィールド,Aは文字列だって伝えているだけだぞ。

な)あー使うための表示ってことっすね。
え?だったら、なんでXにしないんです?Xは文字列だったでしょ?

係)しらねーよ。昔にじーさんたちがそうすることにしたんだから、そうするしかねーだろ?

な)(あんたも大概おっさん超えしてるからね…)

係)しかし。お前できるとかって言ってここに来たんじゃなかったのか…?

な)ま、まぁそこはいいじゃないっすか。コピペも立派な技術ですから!

Nってなんだよ、VってVictoryじゃないの?

       *> --- 数値化後項目 ---
       01  NUM.
           05  N-QUANTITY              PIC 9(7)        VALUE 0.
           05  N-UNIT-PRICE            PIC 9(9)V99     VALUE 0.
           05  N-TAX-RATE              PIC 9V999       VALUE 0.
           05  N-LINE-NET              PIC 9(11)V99    VALUE 0.
           05  N-LINE-TAX              PIC 9(11)V99    VALUE 0.
           05  N-LINE-GROSS            PIC 9(11)V99    VALUE 0.

だからNってなんだよ…

あれ?でもなんか意味あってつけたってことだよなー。
NUM宣言してるから、同じく数字って意味かな。

VALUEだからそれぞれの変数に0を入れてると…やっぱNは数字やな。
N-UNIT-PRICE…わからんから、なんかそんな価格が・・・って

9V999

はぁ??
もうVictoryでいいや…勝ち勝ち。

N-LINE-NET
N-LINE-TAX
N-LINE-GROSS  

はぁ????

てかなんで、さっきと同じようなこと宣言してんの?
ラインだから、行?にある税抜価格の数字?

係)ほんとうるせーな。みせてみろ。

Vは小数点以下の桁数表してるんだ。
999V999→999.999って意味だ。

な)えーだってそれは、9(3)だっていったじゃないですか?

嘘つきですか?俺を惑わそうとしてますよね?
女狐っすか?たぬきっすか?たぬきっすね!

係)なんでたぬき一択なんだよ。

999V999でも、9(3)V999でもいいんだよ。
1桁だけほしいのに 9(1)って書くよりも 9 って書いたほうが早いだろう?

N-LINE-NET
N-LINE-TAX
N-LINE-GROSS 

係)これはCSVのレコード内の行にある税抜き額と税額と税込み額をそれぞれ示すために作っているもんだ。

な)なんとなく意味は分かる感じがするんですけど…

係)今はそれでいいわ。
処理見れば、それぞれがどう使うのかわかるだろうしな。

な)はあ…そこまで俺が退職しないとは限らないですが!


・・・・(無視すんな!)

       *> --- トータル ---
       01  TALLY.
           05  TOT-RECORDS             PIC 9(9)        VALUE 0.
           05  TOT-OK                  PIC 9(9)        VALUE 0.
           05  TOT-ERR                 PIC 9(9)        VALUE 0.
           05  SUM-NET                 PIC 9(13)V99    VALUE 0.
           05  SUM-TAX                 PIC 9(13)V99    VALUE 0.
           05  SUM-GROSS               PIC 9(13)V99    VALUE 0.

       *> --- 国別サマリ(最大50種) ---
       01  COUNTRY-TABLE.
           05  CT-ENTRY OCCURS 50 TIMES INDEXED BY CT-IX.
               10 CT-COUNTRY          PIC X(2)     VALUE SPACES.
               10 CT-COUNT            PIC 9(7)     VALUE 0.
               10 CT-SUM-GROSS        PIC 9(13)V99 VALUE 0.

       *> --- 編集表示用 ---
       01  EDIT.
           05  E-SUM-NET               PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-SUM-TAX               PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-SUM-GROSS             PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-COUNTRY-GROSS         PIC Z,ZZZ,ZZZ,ZZ9.99.

       *> --- バリデーション用 ---
       01  CNT-ALPHA                   PIC 9(4).
       01  CNT-BLANK                   PIC 9(4).

トータルのところは、変数名はさておき、、、ってさっきまでっぽいのが出てくると。

これは今までのとおりって感じだなー。
VALUEとか知らない子が出てきているけど、まぁ0を代入するっていう感じかな。

OCCURS 50 TIMESの弁当箱

       *> --- 国別サマリ(最大50種) ---
       01  COUNTRY-TABLE.
           05  CT-ENTRY OCCURS 50 TIMES INDEXED BY CT-IX.
               10 CT-COUNTRY          PIC X(2)     VALUE SPACES.
               10 CT-COUNT            PIC 9(7)     VALUE 0.
               10 CT-SUM-GROSS        PIC 9(13)V99 VALUE 0.

な)あー…もう寝よう。妖精さんを呼ぼう。おじさんの妖精さんがやってくれるはず。
靴を作れるなら、コードも作れるでしょう?

多分、木靴作ってたのも、COBOLも同じ頃の話だから、寝てれば靴も作ってくれてコードも書き終わっているはずでしょ。

係)誰が妖精だよ。たぬき言ったり忙しいやつだな。

OCCURS 50 TIMES ってのは、同じ弁当箱を50個並べたって話だ。配列の理解でいいぞ。

CT-IX は “今どの弁当箱見てるか” を示す番号札みたいなもんだ。

CT-ENTRY [50]

だったら、これでいいじゃない!?
これならあっさり終わるよ?未来を感じて!

ってかタイムパトロールがタイムマシンで修正してきてあげてよ?こっちのほうが有用だっつって。

そうなったら、お前無職だろうな。

な)…(嫌い)

INDEXED BY CT-IX.

これはCT-IXというポインタ変数を作って、それで、配列を指定するってかんじだな

CT-ENTRY(5)とかでいいのに…回りくどい…

あ!そうか!
おじいちゃんたるもの、回りくどいもんね!
それが仕様という性格に現れていると。うんうん。完全理解。

係)CT-ENTRY(5)でもいいぞ?

な)えええ!?

係)でもそれじゃ速度が落ちるから、そんな書き方はしないぞ。

な)速度?? 距離/時間??

係)なんで速度計算するんだよ。
そうじゃなくて、お前が知ってるようなPCの話してないからな。
50年前のマシンが、そんな早く動くと思うか?

な)あーマイコンってやつですか?電卓が人間よりもでかかったとか。
だったら、手で計算すればいいのにね。

係)いらんことは知ってるんだな。
だから、それでけ実行速度が大きく変わるから、CT-ENTRY (5) とは書かないってことだ。

な)VALUE SPACESってスペース入れておくってことですよね?

さっきVALUE 0とかあったけど、なんでわざわSPACEとかZEROと書くんです?なんも入れてないんだからなにもないのは当たり前じゃないです?

係)アホ、そこにゴミ入ってたら売上1兆円とか出ちまうぞ。

な)えっ!?俺出世しちゃう!?
この歳で課長とかになっちゃいます?
だっったら係長アイス買ってきてくださいよ。

係)何言ってんだ。晴れて無職だろ。じゃーな。

な)勝手にやめさせないでー!

あれ、でも、勝手にゴミが入るとかなくないです?
勝手に入るとかバグじゃないんすか?
欠陥じゃないです?欠陥住宅ですよ!?耐震構造ナッシングですよ!?

係)ま、バグみたいなもんだな。だから最初に MOVE SPACES とか MOVE ZEROES って書くんだよ。

          05 CD-RAW PIC X(21).

な)だったら、なんで最初から全部「0」ってことにしなかったんですかねー。

係)いちいち定義してたら、処理速度落ちるしな。

それに、今のコンパイラなら大体スペース入れてくれるもんだ。

な)なにその今昔物語…

Zと9が同居してる!?

  *> --- 編集表示用 ---
       01  EDIT.
           05  E-SUM-NET               PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-SUM-TAX               PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-SUM-GROSS             PIC Z,ZZZ,ZZZ,ZZ9.99.
           05  E-COUNTRY-GROSS         PIC Z,ZZZ,ZZZ,ZZ9.99.

ま、変数名は係長が教えてくれるからどうでもいいとして、、、

Z,ZZZ,ZZZ,ZZ9.99

な)多分桁数の表示の仕方を言ってるんだろうけど…

係長。今回、全部わからなかったです…。
河原で悲しみに打ちひしがれているので、終わったら教えて…

係)どこに河原がああるんだよ、ドブ川で佇むのか?

今回は、ココだけの話だろ?佇んでんじゃねーよ。

Z,ZZZ,ZZZ,ZZ9.99.

表示用の桁を表してるのはわかるだろう?

な)そらまぁわかりますけど、Zと9がかなんで混じり合ってんすか…
そんなに初心者が嫌いなじーさんたちが作ったんですかね…

幼稚園がうるさいって文句いってくるじーさんたちですか?

な)誰がとかどうでもいいわ。

Zは0から9までの数字が入るがZが入ると表示されない。
9は単純な数字の表示で、これは必ず表示される。

あとは、小数点ってことがわかるな?
「1,234,567.89」と表示されてたら、「0,001,234,567.89」という値が入っているってこった。

な)ほえー。

係)そ。
内部の計算は N-SUM-NET とかでガリガリやって、最後に帳票に載せるときに E-SUM-NET に MOVE して整形するってわけだ。

な)Excel のセル書式設定をコードで書いてるみたいなもんすね

係)…お前にしては、いい例えだな

な)バカにしすぎじゃ?

おむすび

       *> --- バリデーション用 ---
       01  CNT-ALPHA PIC 9(4).
       01  CNT-BLANK PIC 9(4).

CNTがわかんないけど…と思ったけど、カウントとかかな?
アルファベット数えます的な変数で4桁数字だね。

読めちゃう、読めちゃうよ!天才だから!

係)あっそ。

な)どんだけ俺のこと興味ないんすか…

― 目次(読みシリーズ)へ戻る ―

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次