過去の桐井戸端BBS (桐ver.8)
10825 横並びのデータを縦並びにしたい UG2 2001/04/10-20:50
現在、ver8sp6.0を使用しています。

質問の内容ですが、下記のような表があり、横並びを縦並びにしたいのですが
どういったことを行えばいいのでしょうか?

a.tbl(横並び)
項目1:項目2 :項目3 :項目4 :項目5 :項目6 :項目7 :項目8
aaa : bbbb : cccc : dddd : eee : ffff : gggg : hhhh

b.tbl (縦並び)
項目1 : 項目2
aaaa : bbbb
cccc : dddd
gggg : ffff
eeee : hhhh

a.tbl->b.tbl(ちなみに、aaaa等には未定義もあります。)

現在、b.tblの全行削除+圧縮し、書き出しをいくつもかけて、項目1の未定義のみ
絞り込みして行削除し未定義以外のデーターだけ残しています。
(この場合、4つの書き出しをしています。)

このままでも、今のところは動いているのですが、何かスマートなやり方ではないと思い、
もっと賢いやり方があるのではないかと思い、投函させていただきました。
(書き出しを、4回し、未定義を絞り込み削除しているはシステム的に変だと思い
何か良い方法があるはずではと思っています。)

もっと賢いやり方のアドバイスよろしくお願いします。

P.S.現在、このようにバッチ処理ですがリアルタイムで横並びが縦並びになる方法があれば、
そのアドバイスもいただけないでしょうか?(つまり、a.tblにデーターを入れたら
すぐb.tblの様に縦並びになると言う方法)
10826 Re:横並びを縦並びに? 宮城 2001/04/10-23:33
記事番号10825へのコメント
UG2さん、こんにちは。

>このままでも、今のところは動いているのですが、何かスマートなやり方ではない
>と思い、もっと賢いやり方があるのではないかと思い、投函させていただきまし
>た。(書き出しを、4回し、未定義を絞り込み削除しているはシステム的に変だと
>思い何か良い方法があるはずではと思っています。)

「スマート」とは何を想定しておいでですか? 「書き出し」か「読み込み」か、
それをせいぜい履歴にとるくらいしかないと思いますが。

a.tblの形から再考なさるなら、そのための情報を提示いただけるなら、違うコメントもあるかも。

10827 Re:横並びを縦並びに? 【多遊】 2001/04/10-23:40
記事番号10826へのコメント
UG2さん、こんにちは。
宮城さんもコメントをかかれてますが、やはりさきほどの質問だけでは少し無理ですね

リアルタイムには無理かもしれませんが、数行の一括・イベントで可能になるかとおもいます
ただ、奇数番号項目が左、偶数番号項目右になるとか、有る程度のルールが、事前に決まってればの話しです。

ご質問のように、
>項目1:項目2 :項目3 :項目4 :項目5 :項目6 :項目7 :項目8
>aaa : bbbb : cccc : dddd : eee : ffff : gggg : hhhh
>
>b.tbl (縦並び)
>項目1 : 項目2
>aaaa : bbbb
>cccc : dddd
>gggg : ffff
>eeee : hhhh

なぜ、gggg の下に eee が、あるのか?とか、項目※がまったくデータがない場合は前詰めするのか・・・
やはり具体的に質問された方がお答えしやすいです。
やはり「aaa : bbbb : cccc : dddd :」では、わかりづらいですね。

10828 Re:横並びを縦並びに? 佐田 守弘 2001/04/10-23:46
記事番号10825へのコメント
UG2さん
御質問の件は、エレガントな解法は難しいだろうと思います。
少なくとも、桐にその様な処理を行う方法はありません。
横と縦を入れ替えるのは転置書き出しですが、どうやら御提示の表は単純に転地しても目的の形にはなりませんね。

ですから、可能な方法としては、ゴリゴリと力付くで一括処理を駆使して目的の形に書き出すしかないでしょう。
現在行われている方法がその1つの方法だと思います。

それ以外の方法として、
テキストファイルに書き出し、ファイル入力コマンドで2項目単位で四では表に追加して行く方法も考えられます。
これは上記の変形でしかありませんね。

項目計算式で処理できるとエレガントなのですが、1行を4行に増やさなければならないので、なかなか難しそうですね。

佐田守弘(KS-00119)

10829 エレガントな解法 佐田 守弘 2001/04/10-23:56
記事番号10828へのコメント
UG2さん
全コメントを投稿した後、ふと思いつきました。可能性があるので、試してみて結果を報告下さい。

●1行を4行に増やす方法
ポイントはここです。桐の処理の中でこれが可能なのや唯一、行集計です。
元の表に[連番]の様な項目を追加し、連番号の様な唯一の値をふってください。
次いで、この唯一な値をグループ項目として行集計を行います。
値が唯一ですから1レコードが1グループになります。

そして、集計行には、次の様な設定を行います。
1行目:[項目1]に#項目値([項目1])、[項目2]に#項目値([項目2])
2行目:[項目1]に#項目値([項目3])、[項目2]に#項目値([項目4])
3行目:[項目1]に#項目値([項目5])、[項目2]に#項目値([項目6])
4行目:[項目1]に#項目値([項目7])、[項目2]に#項目値([項目8])
後は集計行だけの状態にすれば目的のデータになるはずです。

これで何をするかお分かりだと思います。
行集計機能で、1行を4行に増やし、かつ集計関数でたの項目値を参照する訳です。

佐田守弘(KS-00119)



10830 ありがとうございました。 UG2 2001/04/11-10:59
記事番号10829へのコメント
ありがとうございました。
10831 Re:横並びを縦並びに? 桐野港 2001/04/11-11:54
記事番号10825へのコメント
UG2さん こんにちは

リアルタイムに横並びから縦並びの表に書き換えるも含めて
A表で入力した時点でB表に(A表で入力した)データを追加又は追加済みのデータを
更新することは、表形式編集でなくA表をフォーム入力でイベントを使えば可能です。
似たような処理を桐5でしていますが、桐8ではイベントが使用できますんでやりやすいと思います。

詳しい表の使用目的がわかりませんで概要ですが、奇数項目を入力し偶数項目を入力終了した時点で
奇数項目と偶数項目のデータをB表に行追加又は行訂正で更新します。
その時にA表の該当するデータとB表の該当するデータに一連のデータ番号を自動的に振るようにして
(A、B表共にデータ番号処理用の項目の追加が必要、又B表のデータの並びが必要ならば
整列の為の項目と整列用番号もデータ追加時にA表のレコード位置などから考慮する)
このデータ番号によってA表の入力済みデータの更新時にB表のデータを行追加でなく行訂正を行う。

またAフォームの更新モードで入力前と入力後の項目のデータを比較して変更がない時、
すなわちただリターンキーとか矢印でカーソル移動した時はB表への追加、更新はしない様にすることも可能です。
(B表へのデータの追加、更新にはリターンキーを押してから
一瞬ですが時間がかかるのでこれをなくしてスムーズに項目移動するため)
さらに目的に応じて細かいコントロールも可能と思います。


10832 Re:横並びを縦並びに? 【多遊】 2001/04/11-12:20
記事番号10825へのコメント
UG2さんが
>ありがとうございました。
で、終わられてるのでそれはそれでいいのですが、
上記方法で、最初の質問通り、
>gggg : ffff
>eeee : hhhh
のような答えがでるのでしょうか?

また
>a.tbl->b.tbl(ちなみに、aaaa等には未定義もあります。)
というのは、もしかして、行数が0の場合や複数行有るかも知れないし、
項目も8個とは限らないかもと考えると、なかなかお答えが難しいですね。

10835 Re:横並びを縦並びに? 桐野港 2001/04/12-01:40
記事番号10832へのコメント
多遊さん こんばんは
いつも勉強させてもらってます。

小生ど素人のコメントゆえ間違い多いので軌道修正よろしく
お願いします。

>上記方法で、最初の質問通り、
>>gggg : ffff
>>eeee : hhhh
>のような答えがでるのでしょうか?

小生のコメントのことなのかどうか迷いましたが,ツリーの位置からみて
今までのコメントすべての方法という意味にとりまして....

>現在、b.tblの全行削除+圧縮し、書き出しをいくつもかけて、項目1の未定義のみ
>絞り込みして行削除し未定義以外のデーターだけ残しています。(この場合、4つの
>書き出しをしています。)

>P.S.現在、このようにバッチ処理ですが

以下状況想像ですが
バッチ処理にて書出しを行っておられるので何らかのルールがあるものと解釈しまして
そのルールをイベントに組み込めばよいのではと思います。

また4つの書出しということなので、おそらく2項目をペアにして4回の書出しで合計8項目ではないかと思います。

b表の項目1の未定義のみ絞り込んで行削除とのことなので、それに該当するデータは
イベントにてa表からb表へのデータ移行は最初からしないということにする。

最初の質問から自分なりのかってな状況想像ですが、リアルタイム処理もなんとかなるんではないかと思ったりしております。
があくまでも想像ですので参考にでもしてもらえれば.....

戻る