魔王の憂鬱 -4ページ目

魔王の憂鬱

情報通信っぽいことを、分かりやすく述べているつもりです。

やっとメモを見つけたので、残りを書いちゃいます。

最後はソートを中心に解説していきます。



SORTユーティリティ

    //SORT01 EXEC SORT, SPACE=50

    //SYSIN DD *

       ソート条件

    /*



SPACE

    省略可能。

    データセットに割り振る容量を超えそうなときに指定するパラメータ。

    処理の初めに、指定されたシリンダ数分データセットの領域に割り振る。


ソート条件

 ・SORT FIELDS=COPY

    データセットをそのままコピーする。

 ・SORT FIELDS=(バイト位置1、バイト位置2、条件、順序、・・・)

    条件に従って並び替える


[例] SORT FIELDS=(1, 4, CH, A, 20, 7, CH, A)

1バイト目から4バイト分を「第一のKEY」でソート

20バイト目から7バイト分を「第二のKEY」でソート


 ・KEY条件(文字種)

   CH : 文字

   ZD : ゾーン十進数

   PD : パック十進数

   BI : バイナリデータ

 ・KEY条件(ソート順序)

   A : 昇順

   D : 降順



・INCLUDE=(バイト位置1、バイト位置2、条件、比較、値、[AND/OR]、・・・)

    条件に合うレコードを抽出する。


[例] INCLUDE COND=(1, 4, CH, EQ, C'9876', OR, 7, 3, CH, EQ, C'123')

1バイト目から4バイト分が、文字列の"9876"と等しい

もしくは

7バイト目から3バイト分が、文字列の"123"と等しい



・OMIT COND=(・・・)

    条件に合うレコードを削る


・SUM FIELDS=(・・・)

    指定した条件に合うレコードを集計する。

 ・NONE指定

    同一のデータが複数存在する場合、サプレス(1件に集約)する。

 ・EQUALS指定

    条件で指定した項目以外の属性は、通常どのレコードのものかは不明。

    EQUALS指定すると、一番最初のレコードの属性が付与される。



・コンカチ(連結)

//SORTIN DD DSN=GA.GAT001P,DISP=SHR

// DD DSN=GA.GAT002P,DISP=SHR

    ここで指定するデータセットは同じレイアウトであること。

    そうしないと後続のプログラムでABENDします。

    ソート条件の対象がバイト数で指定されるので、まぁ分かりますね。



・ディスクやテープ使用時

//INPUT DD DSN=hogehoge, DISP=SHR, UNIT=SYSDA, VOL=SER=VOL001

    DISP,TAPEは「DSN=・・・」で、特別扱いでデータセット名を指定可能。

    データセット名という概念をもつ装置は、必ずボリューム名を必要とし、

    明示的に書くときは「VOL=SER=」に続いて指定する。



ということで、一通りのメモ分を消化しましたので、

JCLの解説はここで区切ります。


フー・・。では、次回からはマクロを中心に進めていきます。

結構最近まで気付いていなかったことです。



地デジとか騒がれる以前のテレビというのは

ほぼ「 4 : 3 」とかいう画面サイズだったんですね。

これは「 テレビの横幅 : テレビの縦幅 = 4 : 3 」を意味します。


で、地デジ対応のテレビはというと、

「 16 : 9 」という画面サイズが一般的となっております。

言うまでもなく「 テレビの横幅 : テレビの縦幅 = 16 : 9 」を意味します。


数字だけではよく分かりませんが、横にワイドになっているみたいです。

魔王の憂鬱


↑単純に数字のまま並べてみました。



これがですね。私はずうっっっっっと!


「( 4 : 3 = 16 : 9 じゃないの?)」


と思っていた訳なんですよ。ところが・・



魔王の憂鬱


↑縦幅が合うように並べてみました。



ほら、明らかに違うんですよ。

そりゃそうです。


「 3 : 4 = 9 : 12 」なのですから!


つまり「 9 : 12 」 → 「 9 : 16 」となり、横幅が広くなっているのです。




そういえば、昔のテレビで映画が放送されるときは

画面の上下に黒い線が入っていたものです。

画面サイズの違いを黒線で補っていたんですね。



いやぁー、思い込みっていうのは、怖いものですねぇー。

会社にメモを(ry ・・サーセン



●マクロソースの解説




前回のマクロソースに、便宜的に番号をつけてみました。


1 '↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓


2 Sub HelloWorld()


3 Msgbox "HelloWorld"


4 End Sub


5 '↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑






早速、それぞれの行について解説していきます。



1 '↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓



実はここもマクロの一部でした。

と言っても、ただのコメント文なのですが。


マクロでは 「 ' (シフト+7)」 以降の文字はコメントとして処理されます。

エディターでは、コメント文は緑色で表示されます。





2 Sub HelloWorld()



Sub 

   マクロ関数の始まりを示します。

   Sub の他に Function もあります。

   両者の違いは、関数に戻り値があるかないかです。



HelloWorld :

   マクロ関数の名前です。

   自由につけても構いませんが、

   処理の内容が思い出せるような名前をつけましょう。



() :

   カッコの中には、関数の引数が入ります。

   いわゆるメイン関数の場合、引数は必要ありません。


この行を記述してエンターキーを押すと、

エディターが勝手に End Sub を記述してくれます。

エディターには、こういう補完機能が随所にみられます。






3 Msgbox "HelloWorld"


Msgbox :

   さて、ここがマクロの実行内容となります。

   Msgbox は、文字通りメッセージボックスを表示する処理です。

   文字列の場合は " " ではさみ、

   変数・定数の場合は そのまま変数名・定数名を記述しましょう。


   文字列と変数・定数を並べるときは「 & 」を用います。


例)

   Month = 9

   Day = 9

   Msgbox "今日は" & Month & "月" & Day "日です。"


実行例)
魔王の憂鬱

   Month と Day は変数だと思ってください。

   もし "Month" と記述してしまうと・・


魔王の憂鬱

   なんということでしょう。

   文字列として処理されてしまいました。


   また、文字列と変数・定数が混在しているときは、

   " や & が大文字になっていないかに注意してください。






4 End Sub



エディターが勝手に記述してくれていますが、

この行をもって一つのマクロ関数の終了を示します。





5 '↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑



これは何を意味していたでしょうか?

そうですね。コメント文ですね。






・・とまぁ、このようにしてマクロは作られるのでした。