過去の桐井戸端BBS (桐ver.8)
8011 いくつかの項目の値をまとめて一つの項目値にするには? kaz 2000/10/09-10:07
kazです。またまたお教え下さい。

商品出荷日.tbl

[商品名]  [出荷日1]   [出荷日2]    [出荷日3]
−−−−−−−−−−−−−−−−−−−−−−−−−−
  あ     4/2      5/3        10/1
  い    11/3      8/8
  う     7/7


この表から
たとえば出荷日一覧.tbl

[商品名]  [出荷日]
−−−−−−−−−−−
あ      4/2
あ      5/3
あ      10/1
い     11/3
い     8/8
う      7/7


のように,[出荷日1]〜[出荷日3]をすべて[出荷日]項目に書き出すには
どうすればよろしいのでしょうか?

転置集計で挑んだのですが????でした。
よろしくお願いします。
8012 質問の補足です。 kaz 2000/10/09-10:36
記事番号8011へのコメント
kazより 追加です。

出来得れば,一括処理でやりたいのですが・・・

8013 Re:質問の補足です。 幅田 2000/10/09-11:33
記事番号8012へのコメント
kazさん、こんにちは

>出来得れば,一括処理でやりたいのですが・・・

ということなので、以下の一括処理を試してみてください。

変数宣言 文字列{&商品名,&出荷日}

表 ”商品出荷日”,表番号=1
表 ”出荷日一覧”,表番号=2

編集表 1
ジャンプ 行番号=先頭

繰り返し (.NOT #EOF)
  &商品名=[商品名]
    ケース開始
     ケース ([出荷日1]<>#未定義)
        &出荷日=[出荷日1]
        編集表 2
        行追加 [商品名]=&商品名,[出荷日]=&出荷日
        編集表 1
    ケース終了

    ケース開始
     ケース ([出荷日2]<>#未定義)
       &出荷日=[出荷日2]
       編集表 2
       行追加 [商品名]=&商品名,[出荷日]=&出荷日
       編集表 1
    ケース終了

    ケース開始
     ケース ([出荷日3]<>#未定義)
      &出荷日=[出荷日3]
       編集表 2
       行追加 [商品名]=&商品名,[出荷日]=&出荷日
       編集表 1
    ケース終了

  ジャンプ 行番号=+1

繰り返し終了


終了

8014 Re:いくつかの項目の値をまとめて一つの項目値にするには? KH 2000/10/09-12:18
記事番号8011へのコメント
>商品出荷日.tbl
>
>[商品名]  [出荷日1]   [出荷日2]    [出荷日3]
>−−−−−−−−−−−−−−−−−−−−−−−−−−
>  あ     4/2      5/3 10/1
> い    11/3 8/8
>  う     7/7
>
>
>この表から
>たとえば出荷日一覧.tbl
>
>[商品名]  [出荷日]
>−−−−−−−−−−−
>あ      4/2
>あ      5/3
>あ      10/1
>い     11/3
>い     8/8
>う      7/7
>
>
>のように,[出荷日1]〜[出荷日3]をすべて[出荷日]項目に書き出すには
>どうすればよろしいのでしょうか?

文面から、入力したのは”商品出荷日.tbl”で、このデータから新たに、出荷日としてまとめた”出荷日一覧.tbl”を
一括処理で作成したいという事ですか。入力と処理を別にしているものとしてコメントします。
 まず、商品出荷日.tblから、作業ファイルとして、例えば、”W出荷日1.Tbl”として[商品名]、[出荷日1]を書き出し、
同様に”W出荷日2.tbl”として[商品名]、[出荷日2]を書き出し、さらに”W出荷日3.tbl”で[商品名]、[出荷日3]を書き出します。
次に、”出荷日一覧.tbl”からこの3つのファイルを[商品名]、[出荷日]として読み込みます。
ただし、定型的にこの処理を繰り返す場合は、書き出しファイルは上書き、読み込むほうは前のデータを読み込む前に
削除しておく事を忘れずに。
8016 Re:追伸 KH 2000/10/09-12:23
記事番号8014へのコメント
追伸、商品名順または日付順などはどのような方法が必要なのか
わかりませんが、さらに並べ替えを実行すればよろしいと思います。
8018 Re:横長データを縦長に展開 悲しげ 2000/10/09-13:29
記事番号8011へのコメント
どもっ、kazさん
これはよくあるパターンでして、例えば次のような方法はどうで
しょう?(ただし挙動未確認)

----------------------------------
*使う変数は宣言済であるとする。
表 "商品出荷日.TBL",表番号=1,索引名=・・・
表 "出荷日一覧.TBL",表番号=2
編集表 1
繰り返し(.not #EOF)
 *[出荷日1] 項目番号2であるとする
 *[出荷日2] 項目番号3であるとする
 *[出荷日3] 項目番号4であるとする
 &商品名=[商品名]
 繰り返し &i=2,4
  &出荷日=#項目属性(&i,0)
  条件(.not &出荷日) 繰り返し中止
  編集表 2
  行追加 [商品名]=&商品名,[出荷日]=&出荷日
  表表示
  編集表 1
 繰り返し終了
 ジャンプ 行番号=+1
繰り返し終了
編集表 2
表形式編集 /*展開結果確認のため*/
---------------------------------

あ、これは幅田さんのやり方と同じですね。
じゃ、データが多い場合は、このような編集表切替え→行追加する方法だと遅くなるので、
次のように「印字」コマンド→テキスト経由の方が速くてお奨めです。

----------------------------------
表 "商品出荷日.TBL",表番号=1,索引名=・・・
ファイル削除 "作業.txt"
印字開始 "作業.txt"
繰り返し(.not #EOF)
 *[出荷日1] 項目番号2であるとする
 *[出荷日2] 項目番号3であるとする
 *[出荷日3] 項目番号4であるとする
 繰り返し &i=2,4
  &出荷日=#項目属性(&i,0)
  条件(.not &出荷日) 繰り返し中止
  印字 [商品名],"ξ",&出荷日
  *区切り文字"ξ"はデータ中に有り得ない文字との想定で採用
 繰り返し終了
 ジャンプ 行番号=+1
繰り返し終了
印字終了
終了 表 編集対象表
表 "出荷日一覧.TBL",表番号=2
読み込み テキスト,"作業.txt",区切り="ξ"
表形式編集 /*展開結果確認のため*/
ファイル削除 "作業.txt"
---------------------------------
8019 新たな質問 kaz 2000/10/09-14:25
記事番号8018へのコメント
悲しげさん こんにちは

> *[出荷日1] 項目番号2であるとする
> *[出荷日2] 項目番号3であるとする
> *[出荷日3] 項目番号4であるとする

項目番号が連続しないでとびとびの場合は
どうすればよいでしょうか?
(入力順の関係でどうしても連続には出来ないのですが)

8020 Re:新たな質問 幅田 2000/10/09-14:34
記事番号8019へのコメント
>項目番号が連続しないでとびとびの場合は
>どうすればよいでしょうか?

私の#8013のやり方は、項目がとびとびの場合でも大丈夫です。
私も最初、繰り返し処理を使おうと思ったのですが、項目が連続していない場合を考えて、
あえて項目名をそのまま指定する方法を考えました。
項目が3つくらいならそれでもいいのではないかと思いまして。

8021 Re:新たな質問 悲しげ 2000/10/09-14:48
記事番号8019へのコメント
どもっ、kazさん

>項目番号が連続しないでとびとびの場合は
>どうすればよいでしょうか?
>(入力順の関係でどうしても連続には出来ないのですが)

項目番号がトビトビにならないように表定義を変更すると云うのも手ですが、
ここでおっしゃるのは、表定義順の問題と云うよりは入力状態がトビトビになってしまうこと
(例えば[出荷日2]が空なのに[出荷日3]に値が入ってる等)を包含すると想像します。

となれば、幅田さんが書かれた方法、すなわち#項目属性関数を使わずに、
個々の項目毎にケース分けで臨むのが、やはりよいのではないでしょうか。
8023 ありがとうございました kaz 2000/10/09-15:07
記事番号8021へのコメント
悲しげさん 幅田さん KHさん
本当にありがとうございました。

みなさんの方法をすべて試してみました。すべて,OK!

一応,項目番号を連番になるように再定義してやってみようかと思っておりますが・・・・
(なんか,かっこいい処理方法のような気が???)
しかし,データ件数がたぶん100件以下、私と同じ他の初心者が一括処理プログラムをみたとき
直感的に分かるのは 幅田さんの方法かなと思います。

いずれにしましても,
一つの処理にいくつかの方法があること
この処理が出来ることで,ずいぶんデータ処理
の幅が広がったと感激しています。

皆様のRESの早さに改めて感動しております。
(常時接続なんでしょうね!)

私のような初心者が,何とか一括処理やイベント処理を使ってプログラムを楽しめるのも
皆様のおかげと改めて感謝申し上げます。

これからも,頼りにしておりますので,よろしくお願いいたします。


8063 参考までに みすず 2000/10/14-08:11
記事番号8023へのコメント
私もこの手の処理を大量におこなっています。
定義順に依存するのもイヤだし、項目属性で複雑な処理をするのもイヤだったので、
私はまず変数に項目順を入れておいてからループしています。


&出荷項目="[出荷日1],[出荷日2],[出荷日3],[出荷日4],[出荷日5]"

それでループの時に#対応文字列で抜き出せばいい訳です・

#対応文字列(&出荷項目,&I)

8064 Re:参考までに kaz 2000/10/14-10:12
記事番号8063へのコメント
みすずさん こん**は
ありがとうございました。

>&出荷項目="[出荷日1],[出荷日2],[出荷日3],[出荷日4],[出荷日5]"
>それでループの時に#対応文字列で抜き出せばいい訳です・
>#対応文字列(&出荷項目,&I)

これって,いわゆる「配列変数」ってやつですね。
すっきりさわやかな感じです。
さっそく挑戦してみたいと思います。

重ね重ね感謝申し上げます。

8068 Re:参考までに みすず 2000/10/14-15:10
記事番号8064へのコメント
>これって,いわゆる「配列変数」ってやつですね。
>すっきりさわやかな感じです。
>さっそく挑戦してみたいと思います。
>
>重ね重ね感謝申し上げます。

そういえば桐のWinなら配列変数でも可能でしたね。
上記は疑似的な配列変数なので、桐5(DOS)でも可能です。

戻る