過去の桐井戸端BBS (桐ver.9)
18324 レコードを[数量]の項目に入っている数のぶんだけ複写したい(一括処理?) KAJI 2002/12/25-15:01
桐V9を使用しています。
レコードを特定の項目にある数値の数だけ行複写したいのですが?
従って最初に3レコードあって特定の項目に全て2という数値があれば
各々のレコードを2回行複写して6レコードにしたいのです。

 ロッド番号  品 名  仕 様  数量  
  AAA   12313   BB    2
  AAA   23154   GG     2
  AAA   66543   TT    2

この様な表を

 ロッド番号  品 名  仕 様  数量
  AAA  12313    BB    1
  AAA  12313    BB    1
  AAA  23154    GG     1
  AAA  23154    GG     1
  AAA  66543    TT     1
  AAA  66543    TT     1

この様にしたいのです。(最後に置換で”数量”を1にします。)
現在は、手動にて絞込み→行複写で行っていますが
一括処理を試みたいと思いますのでどなたか御指導ください。
よろしくお願いします。  
18325 Re:レコードを指定数複写したい(一括処理?) 悲しげ 2002/12/25-15:45
記事番号18324へのコメント
どもっ、KAJIさん
これはちょっと難しいですが、行退避/行復旧を駆使して、
次のような感じでしょうか。多分この方法が定石的だろうと思います。
なお、以下の例は非並べ替え状態においてです。
----------------------------------------
var 固有,長整数{&数量,&回数}
表 "なんとか.tbl" /*非並べ替え状態*/
表表示
ジャンプ 行番号=1
繰り返し(.not #EOF)
 &数量=[数量]-1
 行訂正 [数量]=1 /*ここで先に1にしてしまうとか*/
 行退避
 if(&数量>0)
  繰り返し &回数=1,&数量
   ジャンプ 行番号=+1
   行挿入
   ジャンプ 行番号=-1
   行復旧 破棄=しない
  繰り返し終了
 end
 ジャンプ 行番号=+1
繰り返し終了
表形式編集 ガイド="結果を確認して下さい"
----------------------------------------

ps.
余計なことながら、「ロッド番号」ではなく「ロット番号」
Lot Number ではないでしょうか?(^^;)

18326 Re:レコードを指定数複写したい(一括処理?) 悲しげ 2002/12/25-15:58
記事番号18325へのコメント
外したかもしれません。

>従って最初に3レコードあって特定の項目に全て2という数値があれば
>各々のレコードを2回行複写して6レコードにしたいのです。

原文を読み直してみましたが、ここの意味がよくわかりません。
なぜ「従って」なのか?(日本語的には例えば「例えば」では?)
それと「全て2」の場合だけ行複写し、それ以外はしないのか?

18330 Re:レコードを指定数複写したい(一括処理?) たゆー 2002/12/25-21:21
記事番号18326へのコメント
悲しげさんこんばんは(誰への返事?)
>これはちょっと難しいですが、行退避/行復旧を駆使して、
なるほど、このような場合に使用するのですね。

私は、「行退避/行復旧」は過去に一度しか使用したことがありません。参考になります

そんな私流は・・・・例えば、
繰り返し &i=1,255
  絞り込み [数量]>&i
  ****ここに&選択件数による終了処理
    書き出し 表・・・・・追加処理要
繰り返し終了
書き出した表の読み込み・・・

または、

&i=1
絞り込み [数量]>&i

繰り返し (ここに&選択件数による終了処理)
  書き出し 表・・・・・追加処理要
  &i=&i+1
  絞り込み [数量]>&i
繰り返し終了
書き出した表の読み込み・・・

このようなイメージしか思い浮かびませんでした。
どうもありがとうございました


18333 Re:レコードを指定数複写したい(一括処理?) KAJI 2002/12/26-12:07
記事番号18326へのコメント
悲しげさん

>>従って最初に3レコードあって特定の項目に全て2という数値があれば
>>各々のレコードを2回行複写して6レコードにしたいのです。
>
>原文を読み直してみましたが、ここの意味がよくわかりません。
>なぜ「従って」なのか?(日本語的には例えば「例えば」では?)
>それと「全て2」の場合だけ行複写し、それ以外はしないのか?
>
悲しげさん どうも
おっしゃるように「例えば」ですね。
それと数値の項目は、それ以外でも数値の回数だけ行複写を実行します。
よろしくお願いします。
18334 Re:レコードを指定数複写したい(一括処理?) KAJI 2002/12/26-18:43
記事番号18330へのコメント
たゆさん
ありがとうございます。
申し訳ありませんが・・
も少し詳しく解説して頂けないでしょうか?
18337 Re:レコードを指定数複写したい(一括処理?) 悲しげ 2002/12/26-21:40
記事番号18333へのコメント
>よろしくお願いします。

う〜ん、ひょっとしてKAJIさんは No.18325 を読んでいないとか?

18338 Re:レコードを指定数複写したい(一括処理?) たゆー 2002/12/26-21:42
記事番号18334へのコメント
>も少し詳しく解説して頂けないでしょうか?

それでは、簡単に説明を紹介します。
そのまえに、数量が最大数は、いくつぐらいですか?
桐では、絞り込みは、255までしか出来ないので、
それ以上の場合はそのまま使用できません。ご注意下さい。

・変数は単にループ用です。もし大きな数値でしたら整数でなく
 数値で宣言して下さい。

・手続きは、コマンドボタンから手続き実行で呼ばれる物と前提です
 一括の場合は変更下さい。

・この処理は、指定する内容を別表にいったん保存後最終行に読み込むスタイルです。
 そこで、保存するファイルを事前に作成しておきます

・繰り返しを行います。1〜255までなのは、上記制限の為です
 繰り返しを実行すれば、&iの値が1・2・3・・・・255となります
 そこで、「絞り込み [数量]>&i」を行います。これにより
 数量が1より大きい行だけの絞り込みが実行されます。
 繰り返していくうちにだんだん絞り込まれていきます。
 そこで、絞り込んだ内容を先ほどの保存表に「追加」で、書き出ししていきます。
 ただ、「[数量]>&i」が成立しなかった場合、つまりもう絞り込む行がない場合、
 繰り返す必要がなくなります。そこで、中止を行います。

・この状態で、表は最大数量まで絞り込まれてますのでいったん絞り込みを全解除しておきます。
 そして終端行にジャンプ後、先ほどの書き出したファイルを読み込みます。

・作業ファイルが不要でしたらこのあと削除しておいて下さい。

※このあと整列や、置換等必要な処理を行って下さい。
一応サンプルも紹介しておきます。やさしい、また短い処理ですので、
リファレンスなどご覧になりコマンドの内容を確認して下さいね。
> 書き出し 表,"対象表$$$.tbl",追加,*
この、追加や、「書き出し 枠組み」など。

================================
名札 メイン
 変数 整数{&i}


手続き定義開始 指定数複写()

  書き出し 枠組み, "対象表$$$.tbl
  繰り返し &i=1,255
  絞り込み [数量]>&i
    条件(&選択件数=0) 繰り返し中止
    書き出し 表,"対象表$$$.tbl",追加,*
  繰り返し終了

  解除 *
  ジャンプ 行番号=終端
  読み込み 表 "対象表$$$.tbl",*
手続き定義終了


これが、理解できればもう一つの方も分かりますよね
是非、頑張って下さい。

戻る