以前の「@」はどうなってるの!

     ◇   質問者/石原 永年
     ◇   回答者/柏木/榎村/原田/蓑輪/大竹/待場/豊島/栗原の各氏 他 (順不同)
         ◇ 事例/お薦めプログラムの目次へ
《質問者: 石原 永年 (大連市)》
  以前 PIPS 4Gでは入力時に「@」を利用して上段と同じものをコピー出来たのですがThe PIPSではどうなるのでしょうか? プログラム上で「@」を使用しているのでその対応が分かりません。よろしくお願いします。



《回答-1: 柏木 秀一 (東京都)》
石原さん、こんにちは
> 以前 PIPS 4Gでは入力時に「@」を利用して上段と同じものをコピー出来たのですが
> The PIPSではどうなるのでしょうか?
> プログラム上で「@」を使用しているのでその対応が分かりません。

The PIPSでも「@」は効きます。具体的には「@」または「@U」で上をコピー、「@D」で下をコピー「@L」で左をコピー、「@R」で右をコピーとなっています。オートの中でも使えたと思います。

《回答-2: i-net部会》
石原さんへ、いそいでおられるようなので、とりあえず現時点での報告をします。
まずスーパーPIPSの定義表の実行式のなかでの「@」のつかいかたのユニークさに驚かされました。11月の例会で参加者の何人かの人に石原さんの質問をぶつけてみました。
MPUの定義表だったら、スーパーPIPSの時と定義表の書方がかなりかわったので、もしかしたら石原さんの望むことは無理かもしれないとの答がありました。
例えば、商品コードが0271とか0255とか、頭に0のデータがありました。
大雑把な説明ですが、この列が2列目としてこれを5列目に入れる実行式がスーパーPIPSの時はC2=C5でOKでしたが、Win/PIPSではこの結果は271とか255というように頭の0が飛んでしまいます。
これはTM:C2=C5というように書方が変りました。
また条件式のANDとOR条件の書き方もスーパーPIPSの時OKだったものがWin/PIPSでは駄目になったものもあります。

《回答-3: 榎村 暢文 (愛知県)》
i-net部会の元山様よりFAXでこの問題が送られてきましたので、早速試してみました。たぶん、入力用(MT、W、WC、WR)の定義表と思います。入力用でお使いでしたら、"@"=C20をM(P+1,20)=(P,20)とすることによって作動します。もしMPUですとマニュアルによれば文法違反で作動しないと思います。よって、i-net部会の回答が最適だと思います。私は、困ったときはAUTOで解決してきましたので、PIPS 4Gでもこの様な使い方をしたことがありませんでした。本当にPIPSは柔軟性に富みあらゆる難問に答えられるソフトと改めて感じ入りました。この広場を通じて、よい成果を上げられますようお祈りいたします。

《回答-4: 原田 敏明 (東京都)》
残念ながらスーパーPIPSと違い、MPUでは、"@"=Cnのような使い方はできないようです。
同様な処理をする方法として、丸岡さんが使っていた方法でダミーでサブページを使い、常に前の行の情報をサブページの指定したセルに保管しておき、ある条件の場合だけ取り出すやり方があります。
("ダミー"は、必ずマッチングするようにするように"1"などをセットする)
マスターページ
1 2 3 4<---列番号
---------------
X Y Z ダミー
---------------
A 10 1
B 10 1
B 10 1
B 10 1
B 10 1
A 10 1
B 10 1
B 10 1
B 10 1
B 10 1
---------------

サブページ (サブバッファ)
1 2 3 4<---列番号
---------------
X Y Z ダミー
---------------
1
---------------

<オート>
G;マスターページ/1
DR;A;Y;
IR;S;T+1;1;
FILL;1;T;4;Y;
S;

MPU;マスターページ;S;@ダミー;;@ダミー;
C1="A";C2=C3:C3=S3;
C1="B";S3+C2=C3:C3=S3;E;Y;
STOP

結果
1 2 3 4<---列番号
---------------
X Y Z ダミー
---------------
A 10 10 1
B 10 20 1
B 10 30 1
B 10 40 1
A 10 10 1
B 10 20 1
B 10 30 1
B 10 40 1
---------------


《回答-5: 蓑輪 和男 (町田市)》
石原さん、はじめまして
元山さんからも話を聞いて、この質問をMPUで試してみました。なるほど、The PIPSでは「@」の文字が書き込まれて失敗です。
念の為、PIPS 4Gで試したら・・出来るんですね、上のコピーが・・。私は知りませんでした。
私の場合、上段のコピーは、対象データと同じフォーマットの1行ダミーをサブバッファにおいて、MPUのM(もしくはバインダー)とSを使い、Sにデータを一時保持させて、処理を行なってます。
照合フリーのキー列が必要ですが(縦罫線も可)、計算も文字も可能で定義表も使えます。・・・原田さんの回答と同じです。
例)部単位の累計(TEST:バインダー名)
列2: 担当、部小計(T)、全社計(GT)、列4:数量、列6:累計
奇数列は罫線で列1をキー列にしています。

<TESTRUN>
G;TEST/1;DR;A;;IR;S;4;;S;
MPU;TEST;S;1;;1;
C2<>"=*T";C4=C6:S4+C6=C6:C6=S4;
C2="T";S4=C4:C4=C6:S6+C6=S6:" "=S4;
C2="GT";S6=C4:S6=C6:" "=S6;E;Y;
STOP

尚、文字列の複合は不可で(0になる)、その時はLET文を使ってます。かなり前に教わったノウハウですが、私のプログラムのいたるところで活躍しています。
石原さんがご利用なっている業務処理がわかりませんのでこの方法が適当かどうかわかりませんが、参考にして下さい。

《回答-6: 待場 純 (千葉県)》
質問への回答です。石原さんのご指摘の通り、あのままではうまくいきませんでした。
次善策として、一旦作業終了後に次のような処理をするというので、よければ、なんとか回ります。これで元の処理がうまくいくかはわかりませんが参考までにお知らせします。
<アットマーク>
/* 列番号=X2 列番号を20列として X2に20を代入 */
LET X2=20;
FOR X1=H TO T;

LET V1=[X1,X2]; IF V1<>"@" THEN CONTINUE;
WC;%X2,%X1;@;ESC;
NEXT;
STOP;

《回答-7: 大竹 博 (栃木県)》
石原さんへ
このサイトへの書き込みは上手く繋がらず、疲れました。
取りあえず用件のみですいません。
"@"=C20は残念ながら、Win/PIPSでは成立しませんでした。
"@" => M(P-1,P+14)=C20 ではどうでしょうか。 ~~~~~~~~~~~
Pはカーソルの現在地を意味し、1行上の14列目のデータをGETする設定です。
取り急ぎ検証結果のみ、ご報告申し上げます。

《回答-8: 豊島 淳也 (千葉県)》
半信半疑で試してみましたら、上の行のコピーをしました。驚きました。しかも、コピーした内容から計算した結果をその列に格納すれば、その次の行はそれをコピーするという、ACMのような動きもします。
やはりPIPSとの付き合い方は「できるはずがないと思っても、取り敢えず試してみる」ということでしょうか。

《回答-9: 栗原 勲 (新潟県)》
データ書き込み表がわかりませんが、C20の列属性の設定は無しと推測し、MPU指令での処理ではなく、WC/T指令での処理がよいかと思います。
以下のようにならないか確認願います。
1: TESTキャビネットに、DATA、TEIGI、AUTOのバインダーをつくる
2: TEST:DATAバインダーには、データ格納表(H>T)を作る
3: TEST:TEIGIバインダーには、下記定義表を作る


4: TEST:AUTOバインダーには、下記オートプログラムを記述
<AA> (プログラム) /* コメント */
G;TEST:DATA/E; /* データ最終行を呼び出す*/
IF H>T THEN LET V1="0"; /* データなしの時V1に"0"を格納 */
IF H>T THEN GOTO $a;
IF [T,20]<>"" THEN GOTO $b;
W;T;20;@;ESC; /* [T,20]に直近値を複写 */
$b:LET V1=[T,20]; /* V1には直近値を格納 */
DR;A;; /* 全行削除 */
$a:MT;DUMMY;ESC; /* ダミー行を挿入 */
LET [H,20]=V1; /* ダミー行C20にV1値を代入*/
MT;(必要データ入力);ESC; /*MT指令で必要データを入力 */
IF H=T THEN STOP; /* データ未記入のとき終了 */
FOR X2=H+1 TO T;
LET V2=[X2,6];
W/T;TEST:TEIGI/1;%X2;6;%V2;ESC; /* 一行ずつ定義表でデータの更新 */
IF [T,20]="" THEN CONTINUE;
LET [H,20]=[T,20]; /* [H,20]に直近値を複写 */
NEXT;
DR;H;; /* ダミー行を削除 */
APD/N;;TEST:DATA;; /*処理データをデータバインダーにAPD */
STOP;

《お礼: 石原 永年 (大連市)》
表題の件につきまして多くの皆様のご意見を頂きありがとうございました。
色々と参考になりました。北京出張中につきお礼が遅くなり申し訳ありません。
北京・大連は今週より本格的な冬将軍の到来です。ただ今の気温はマイナスに近いと思います。
日本と同じように当地でも鍋の美味いシーズンになりました。
今夜は突然やって来たスペイン人の友人夫妻と中国式キノコ鍋(マツタケや野菜・牛肉・羊の魚介類のシャブシャブ)の予定です。
皆様の中でもしも中国へ来られる機会がありましたらお気軽にお立寄りください。
本当にありがとうございました。

このページのTOPへ戻る