過去の桐井戸端BBS (桐ver.5)
4240 「条件」コマンドの使い方 おしの 2000/1/21-00:22
またまた質問をさせて下さい。
実は下記のような一括処理を書いたのですが条件の(&php=2)
もしくは(&php=3)にうまく飛んでくれないのです。
 1を入れても2を入れても3を入れてもいつも(&php=1)
の命令に行ってしまうのはなぜでしょうか?
**********************************
 画面表示 (18,20),"班順なら1,番号順なら2を入力して下さい",緑
 キー入力 (19,48)-(19,49),&php
 条件 (&php=1) 
条件(.NOT #行集計状態 .AND .NOT #選択状態 .AND #整列状態) 整列解除
一覧表定義
整列 "tst"
置換 [group]=#INT(#N-1)/5+1
帳票印刷

 条件 (&php=2)
条件(.NOT #行集計状態 .AND .NOT #選択状態 .AND #整列状態) 整列解

  一覧表定義
  帳票印刷

 条件 (&php>2)
分岐 初期画面
**********************************

4242 条件コマンドとケースコマンド 佐田 守弘 2000/1/21-00:47
記事番号4240へのコメント
おしのさん
御質問は桐ver.5でしょうか(使用バージョンは書いて下さい)。
さて、御質問の件は条件コマンドとケースコマンドの違いです。まず先にこの2つの
コマンドを説明しておきます。

●条件コマンド
条件 (<条件式>) <実行コマンド>
括弧の中に記述した条件式が成り立つ場合、その後ろに記述したコマンドを実行しま
す。成り立たない時には、そのまま次の行に行きます。
つまり、条件コマンドは1つのコマンドを実行させるかどうかを判断する時に使いま
す。

●ケースコマンド
ケースコマンドは次の様な構造で記述します。

ケース開始
ケース (<条件式1>)
<実行コマンド群1>
ケース (<条件式2>)
<実行コマンド群2>
ケース その他
<その他のケースで実行するコマンド群>
ケース終了

つまり、条件式で分類できるいくつかのケースがあり、それぞれのケースについて1
つないし複数のコマンドを実行させる時にケースコマンドを使います。
ケースコマンドでは、上から順に条件式が評価され、成り立つ場合には、その直後か
ら、次の「ケース」までの間の複数の行のコマンド(コマンド群と表記しました)が
実行されます。実行された後は、「ケース終了コマンド」に移動します。
「ケース その他」は、どの条件式も成り立たない時に、その他の条件として実行さ
せたい場合に記述します。

御質問の一括処理ですが、ケースによって複数行からなるコマンド群を実行させたい
様なので、ケースコマンドで記述するのが正解です。

次の様に記述して下さい。

ケース開始
ケース (&php=1) 
条件(.NOT #行集計状態 .AND .NOT #選択状態 .AND #整列状態) 整列解除
一覧表定義
整列 "tst"
置換 [group]=#INT(#N-1)/5+1
帳票印刷
ケース (&php=2)
条件(.NOT #行集計状態 .AND .NOT #選択状態 .AND #整列状態) 整列解除
一覧表定義
帳票印刷
ケース終了
条件 (&php>2) 分岐 初期画面

●補足
「条件(.NOT #行集計状態 .AND .NOT #選択状態 .AND #整列状態) 整列解除」
の行は履歴で作らせたために入っているのだと思います。一括処理で記述する場合に
は、その時に行集計されているかどうかは分かっているはずなので、このコマンドは
通常は不用です。

また、付け加えになりますが、私個人の希望(?)としては、スパゲティボールの素材
になりやすい「分岐」コマンドだけは使ってほしくないコマンドです。
繰り返しコマンドを使って、それ以外の入力があったらループを終了して初期画面の
コマンドに戻る形で作ると、きれいな構造になります。

佐田守弘(KS-00119)
より詳しい解説は、私のHPにあります桐ver.5関連のコンテンツを参考にして下さい


4251 Re:ケース制御記述上のテクニック 宮城 2000/1/21-11:01
記事番号4242へのコメント
ケースコマンドはコマンド群を指定できるのが魅力ですが、逆にどこからどこまで
効いているのかわからなくなる「副作用」もあります。

ケース開始
 ケース(なんとか条件式)
  コマンド群1
 ケース(かんとか条件式)
  コマンド群2
 ケース その他
  コマンド群3
ケース終了

のようにちゃんとインデント(段落)をとるとか、ちょっと操作はかったるくなり
ますが、いっそ

ケース開始
 ケース(なんとか条件式)
 ケース(かんとか条件式)
 ケース その他
ケース終了

のように構造を記述後、コマンド群記述に戻るべしと思っております。急がば廻れ
であります。繰り返し制御なんかもね。

深みにはまったことのないかたにはぴんとこないかもしれませんが、蛇足。


4253 Re:ケース制御記述上のテクニック 宮城 2000/1/21-11:23
記事番号4251へのコメント
ネスティング(いれこ構造)やりすぎてのたうちまわったの思い出して泣けてきま
した。

もっと言えば、

ケース開始
ケース終了

からすら記述するようにしています。

さらに、万能とは言い難いのですが、一括処理に「ケース」含む(デフォルトでそ
うなります)で選択(絞り込み)かけてみて構造を確認する手もあります。

かなり深みにはいりますが、それでもはまる場合。私のサイトで公開済みですが、
選択(絞り込み)されなかった「ケース」コマンド記述行の直前行が「¥」で終わ
ってたりして・・・。

蛇足の蛇足。

4260 Re:ケース制御記述上のテクニック おしの 2000/1/21-23:09
記事番号4253へのコメント
佐田さん、宮城さんありがとうございました。

おかげで条件文が「通り」ました。

でも、あくまでも「コピー」なのでまだ自分のものになった気がしません。

「ケース」、と「条件」の使い方をもう少しいろいろな例に当たってみます。

追伸 佐田さん、桐のVer標記の件、失礼しました。
そうですよね、いまや8の時代なのに5を使いはじめた私。
でもそれにもおつきあい下さり、その上、丁寧に教えていただき感謝しています。

宮城さん、これからホームページを覗かせていただきます。

4269 Re:「条件」の使い方がよくわからないのです いかすぱげてぃ 2000/1/22-12:03
記事番号4240へのコメント
おしのさん、こんにちわ。

まさに佐田さんの書かれた通りなのですが、ポイントは
条件コマンドは『指定したその1行だけ』
ケースコマンドは『次のケースまで』を条件範囲として実行するというところにあります


ですから、どうしても、条件コマンドで制御したければ、次のように書けば
ケース文と同じになります。(不効率でだらしない…(^^;)

**********************************
 画面表示(18,20),"班順なら1,番号順なら2を入力して下さい",緑
 キー入力(19,48)-(19,49),&php

*---------この範囲が条件 (&php=1)-----------*
 条件 (&php=1) 条件(.NOT#行集計状態.AND.NOT#選択状態.AND#整列状態)整列解除
 条件 (&php=1) 一覧表定義
 条件 (&php=1) 整列"tst"
 条件 (&php=1) 置換[group]=#INT(#N-1)/5+1
 条件 (&php=1) 帳票印刷
*------------------以上----------------------*

*---------この範囲が条件 (&php=2)-----------*
 条件 (&php=2) 条件(.NOT#行集計状態.AND.NOT#選択状態.AND#整列状態)整列解除
 条件 (&php=2) 一覧表定義
 条件 (&php=2) 帳票印刷
*------------------以上----------------------*

*---------この範囲が条件 (&php>2)-----------*
 条件 (&php>2) 分岐初期画面
*------------------以上----------------------*
**********************************


もっとも、集約すれば次のように書くことも可能です。

**********************************
 画面表示(18,20),"班順なら1,番号順なら2を入力して下さい",緑
 キー入力(19,48)-(19,49),&php

 条件 (&php>2) 分岐初期画面

 条件(.NOT#行集計状態.AND.NOT#選択状態.AND#整列状態)整列解除
 条件 (&php=1) 整列"tst"
 条件 (&php=1) 置換[group]=#INT(#N-1)/5+1

 一覧表定義
 帳票印刷
**********************************

佐田さん>例のブツ届きました。(^^)v(笑ひ)

4282 Re:「条件」の使い方がよくわからないのです おしの 2000/1/23-07:16
記事番号4269へのコメント
佐田さん、宮城さん、いかすぱげてぃさん。
ありがとうございました。結局以下のようなCMDができました。

*********************************
 キー入力 (16,48)-(16,49),&クラス
 画面表示 (18,20),"班順なら1,名簿番号順なら2を入力して下さい",緑
 キー入力 (19,48)-(19,49),&php
ケース開始
ケース (&php=1) 
整列 "han"
帳票印刷 ”名簿B5H”
ケース (&php=2)
整列 "mei"
帳票印刷 ”名簿B5M”
ケース終了
条件 (&php>2) 分岐 初期画面
**********************************
ここでは班順用の帳票と、番号順用の帳票をそれぞれに作りました。

理由は前者の場合、太罫線は班ごと、後者の場合は5行ごとにしたかったからです。
つまり、帳票の場合、グループ項目定義は一つの帳票につき「小計グループ項目」一つしかできそ
うになかったので、2つ作ったのですが・・・。

これでもいいのでしょうか?ちょっと気になります。
つまり、一枚の帳票で使い回しのようなことができるのでしょうか。

追伸 いかすぱげてぃさんへ。
>条件コマンドは『指定したその1行だけ』
>ケースコマンドは『次のケースまで』を条件範囲として実行する
なるほど。「条件」と「ケース」の違いが実にすっきりしました。

戻る