[リストへもどる]
一括表示
タイトルご無沙汰致しております
記事No2151
投稿日: 2006/05/08(Mon) 21:51
投稿者まつもと 大阪
 昨年、転職を機にPUCを退会致しました。
今の職場はファイルメーカーやアクセスが
主流なのですが、ローカルではデータを
インポートしてPIPSを使用させて頂いております。

で、質問なんですが、伝票番号の照合で
バインダー1にあってバインダー2に無い
データ行を抽出したいのですがひとつの
コマンドで可能でしょうか?

初歩から脱却できず申し訳ありませんが
よろしくお願い致します。

タイトルRe: ご無沙汰致しております
記事No2152
投稿日: 2006/05/08(Mon) 23:52
投稿者柏木@東京都
参照先http://www.pips.gr.jp
まつもとさん、こんばんは。

> で、質問なんですが、伝票番号の照合で
> バインダー1にあってバインダー2に無い
> データ行を抽出したいのですがひとつの
> コマンドで可能でしょうか?

(1) バインダー1にあってバインダー2に無いデータ
これで1ステップですね。コマンドとしてはMPUあたりでしょうか。

(2) 抽出
CSが簡単で分かりやすいですね。

というわけで2ステップ必要ではないかと思ってます。
PUCのメーリングリストでもアナウンスしたので、何らかの回答が得られる
と思います。もう少し、お待ちください。

柏木@東京都

タイトルRe^2: ご無沙汰致しております
記事No2154
投稿日: 2006/05/09(Tue) 00:23
投稿者元山+千葉県
まつもとさん、こんばんは。

> (1) バインダー1にあってバインダー2に無いデータ
> これで1ステップですね。コマンドとしてはMPUあたりでしょうか。
>
> (2) 抽出
> CSが簡単で分かりやすいですね。
>
> というわけで2ステップ必要ではないかと思ってます。

私は柏木さんの紹介された方法を使っています。
MPUのコマンドの威力はすごいですよ。

機関誌5月号にMPUの定義表をつかった事例を投稿したのですが、
応用範囲が広く、すぐれものです。
是非、トライしてみてください。

元山より

タイトルRe^2: ご無沙汰致しております
記事No2155
投稿日: 2006/05/09(Tue) 00:43
投稿者西村@豊田
> 伝票番号の照合でバインダー1にあってバインダー2に無い
> データ行を抽出したいのですが

40頁約3200件のデ−タをCSで照合しましたが、3分強の処理時間を要しました。伝票番号がSORT可能であれば、もっと効率の良い処理方法も有ると思いますが、取りあえずテストしたオ−トは次のとおりです。
(不照合のデ−タ行番でなく、伝票番号を表示しています)

<伝票照合>
FOR X10=1 TO BINDER("台帳A")
G;台帳A/%X10; P;S1;

FOR X1=1 TO T; CLEAR V1;LET V1=[X1,@伝票番号 ];
IF LEN(V1)=0 THEN CONTINUE;
LET V2='"'+V1+'"';CS;台帳B;@伝票番号 =%V2;;;;
IF RESULT(1)>0 THEN GOTO $台帳;
MT/B;不照合DATA;%V1;台帳Bになし;ESC;
$台帳: G;S1;
NEXT;
NEXT;
STOP;

タイトルRe: ご無沙汰致しております
記事No2153
投稿日: 2006/05/09(Tue) 00:22
投稿者高橋@千葉
まつもとさん

お久しぶりです。お元気そうで何よりです。

> 伝票番号の照合で
> バインダー1にあってバインダー2に無い
> データ行を抽出したいのですがひとつの
> コマンドで可能でしょうか?

私なら、CAMとCSを組み合わせます。
1:CAM-----
バインダ1をメインに、バインダ2をサブに指定し、
キーとして、伝票番号1と伝票番号2を照合し、
バインダ1の全列とバインダ2の「伝票番号2」列を取り出し、
作業用バインダ「WK」に登録する。

2:CS-----
作業用バインダ「WK」を対象とし、
条件として、@伝票番号2 =""
作業用バインダ「WK2」に登録する。

実際に試行してみたオートを付記します。

<DEN>
CAM;バインダ1;バインダ2;@伝票番号1 ;;@伝票番号2 ;
A;S@伝票番号2 ;;WK/D;
CS;WK;@伝票番号2 ="";;;WK2/D;
STOP;

タイトルRe^2: ご無沙汰致しております
記事No2156
投稿日: 2006/05/09(Tue) 01:20
投稿者西村@豊田
高橋さま

> 私なら、CAMとCSを組み合わせます。

CSで3分も掛かった処理が、一瞬で終ってしまいました。さすが!です。
(キャビネットの頁の余裕が無くて、慌てて拡張しました)

タイトルRe^3: ご無沙汰致しております
記事No2159
投稿日: 2006/05/09(Tue) 21:51
投稿者高橋@千葉
西村さん

コメントありがとうございます。

> (キャビネットの頁の余裕が無くて、慌てて拡張しました)

途中経過のバインダをいちいち保存しなければならないのが、
PIPSの一つの弱点ですね。
そこで、これを避けるために、1ページずつバッファ上で処理
して、最終結果だけを保存するよう工夫して見ました。ご覧く
ださい。

<DEN>
/***** A-1..空のバインダ「WK2」を準備する *************/
CAM;バインダ1/1;バインダ2/1;@伝票番号1 ;;@伝票番号2 ;
A;S@伝票番号2 ;;;
CS;M;C1<>C1;;A;WK2/D;
/***** B-1..頁毎に処理して、「WK2」に登録する *********/
FOR X1=1 TO BINDER("バインダ1");
CAM;バインダ1/%X1;バインダ2;@伝票番号1 ;;@伝票番号2 ;
A;S@伝票番号2 ;;;
CS;M;@伝票番号2 ="";;;;
IF RESULT(1)=0 THEN CONTINUE;
APD;M;WK2;Y;
NEXT;
STOP;

タイトルRe^4: ご無沙汰致しております
記事No2161
投稿日: 2006/05/10(Wed) 05:21
投稿者まつもと 大阪
ありがとうございます
CAM CS CAM で試してみました
目的は果たせました

> 途中経過のバインダをいちいち保存しなければならないのが、
> PIPSの一つの弱点ですね。

上書きは出来ないみたいですね

> そこで、これを避けるために、1ページずつバッファ上で処理
> して、最終結果だけを保存するよう工夫して見ました。ご覧く
> ださい。

すみません、貧弱な知識では理解不能です
一行ずつ解析してみます

> <DEN>
> /***** A-1..空のバインダ「WK2」を準備する *************/
> CAM;バインダ1/1;バインダ2/1;@伝票番号1 ;;@伝票番号2 ;
> A;S@伝票番号2 ;;;
> CS;M;C1<>C1;;A;WK2/D;
> /***** B-1..頁毎に処理して、「WK2」に登録する *********/
> FOR X1=1 TO BINDER("バインダ1");
> CAM;バインダ1/%X1;バインダ2;@伝票番号1 ;;@伝票番号2 ;
> A;S@伝票番号2 ;;;
> CS;M;@伝票番号2 ="";;;;
> IF RESULT(1)=0 THEN CONTINUE;
> APD;M;WK2;Y;
> NEXT;
> STOP;

タイトルRe: 有難うございます
記事No2157
投稿日: 2006/05/09(Tue) 05:48
投稿者まつもと 大阪
 みなさん、早速のレス有難うございます。
現場が主な仕事なのでじっくり考える時間が
あまり取れないのですが、

バインダ2にバインダ1をくっつけて 空白に
なった伝票番号を抽出して これにバインダ2の
データをくっつければいいんでしょうか、、

夜にみなさんのご提案を検討させて頂こうと思います。
とりあえず、行って参ります。

タイトルRe^2: 有難うございます
記事No2158
投稿日: 2006/05/09(Tue) 09:11
投稿者高橋@千葉
まつもとさん

> バインダ2にバインダ1をくっつけて 空白に
> なった伝票番号を抽出して これにバインダ2の
> データをくっつければいいんでしょうか、、

これだと初めの意図とは逆になって、
「バインダー2にあってバインダー1に無いデータ行」
を抽出してしまいます。

バインダー1をメインに指定してください。

タイトルRe^3: 有難うございます
記事No2162
投稿日: 2006/05/10(Wed) 05:30
投稿者まつもと 大阪

> これだと初めの意図とは逆になって、
> 「バインダー2にあってバインダー1に無いデータ行」
> を抽出してしまいます。
> バインダー1をメインに指定してください。

はい、歳のせいでしょうか?
この辺は指差し確認しないと脳みそがついて行きません
あとは抽出データのデコレーションですが
躓いたら また宜しくお願い致します

プログラム作りは 頭の体操にはいいですが、
昔のようにスラスラ(?)とは行かないようです

タイトルRe: ご無沙汰致しております
記事No2167
投稿日: 2006/05/12(Fri) 13:59
投稿者野崎@東京
まつもとさん


> で、質問なんですが、伝票番号の照合で
> バインダー1にあってバインダー2に無い
> データ行を抽出したいのですがひとつの
> コマンドで可能でしょうか?

すでに沢山名回答がでているのに、今更の感ですが、
MPUで一発で2つのバインダー同士のマッチング可能です

1)それぞれのバインダーの表に2−3桁のダミー列を設けます
2)MPUコマンドで双方のデータ列を照合させます
3)合致するデータ行のダミー列になにか記号を記入させます
  (双方のバインダーにそれぞれ記入するので記入のない
   データ行がミスマッチデータです) 

4)あとは不一致(ミスマッチ)データをCSでさがすだけ

まずマニュアル操作で試してはいかがですか

  MPU;A(主データ表);B(サブデータ表);
  (例えば) 2;;2;   /*夫々の照合列番 */
       (必要な条件あれば、無ければリターン) ;
  (第1実行式)"Q"=S10(サブデータ表ダミー列)
       :(コロン)(で複数の実行式をつなげる)
  (第2実行式)"P"=C13(主データ表ダミー列) ;

  E;Y
      
で終了です。

 なおミスマッチ探しは必ず両方の表を対象にして下さい
 以上です  ご成功を祈ります

タイトルRe^2: ご無沙汰致しております
記事No2170
投稿日: 2006/05/14(Sun) 21:20
投稿者まつもと 大阪
野崎さん、ありがとう御座います。

> MPUで一発で2つのバインダー同士のマッチング可能です

仮バインダーをたくさん作ってこんがらがっていた所です。
明日、早速ためしてみます。