過去の桐井戸端BBS (桐ver.9)
26721 同じ[ID]の複数の名前を別のテーブルに書出したい 渡辺金一 2004/06/20-23:34
桐初心者、いつもお世話になります。
桐V9
B.TBLの
[ID] [番号] [名前] ・・・
 1   1  ○○
 1   2  ××
 1   3  △△
 2   1  ○×
 2   2  ○△
のデータをD.TBLの
[ID] [名前1] [名前2] [名前3]・・・[名前10]・・・[郵便番号] [住所]
 1  ○○  ××  △△  
 2  ○×  ○△
に書出し印刷処理用のテーブルを作成したいのですが
[ID] データ型:長整数、[番号] データ型:整数、[名前1]:文字列
よろしくご指導のほどお願い致します。 
26733 Re:同じ[ID]の複数の名前を別のテーブルに書出したい 佐田 守弘 2004/06/21-23:20
記事番号26721へのコメント
渡辺金一さん
一括処理を使って、印字コマンドで書き出す必要があります。
簡単に要点だけを書くと次の様になります。

代入 &ID=0
印字開始 <テキストファイル名>
繰り返し (.not #終端行)
 ケース開始
  ケース ([ID]=&ID)
   &名前=&名前+"<適当な区切り文字> "+[名前]
  ケース その他
   条件 (&ID<>0) 印字 &ID,<適当な区切り文字>,&名前
   代入 &名前="",&ID=[ID]
 ケース終了
 ジャンプ 行番号=+1
繰り返し終了
印字終了

佐田守弘(KS-00119)
26739 ありがとうございます 渡辺金一 2004/06/22-17:44
記事番号26733へのコメント
佐田先生ありがとうございます。
一括処理 試してみます。
渡辺金一
26784 Re:同じ[ID]の複数の名前を別のテーブルに書出したい 渡辺金一 2004/06/24-19:05
記事番号26733へのコメント
6/24フォーム(C.TBL)のコマンドボタンからイベントで行ったところ
手続き定義開始 名前書き出し01()
表 "B.TBL"
代入 [ID}=0


印字終了
手続き定義終了

同じ[ID]の一番目のレコードの名前がすべて抽出できません。
区切り文字は "\t" としました。
テキストファイルに抽出されたデータ例
名前が2件以上ある場合
3\t\tB\tC\tD\tE --- [ID]3 ,[名前]B,C,D,E --- [名前]A が抽出されない
名前が1件の場合
9\t --- [ID]9 ,[名前] が抽出されない
という結果になりました。
フォームのコマンドボタンからのイベントでは無理で一括処理で行わないと
いけないのか原因がわかりません。
ご指導のほどよろしくお願いいたします。
26796 コマンドにミスがありました 佐田 守弘 2004/06/25-17:55
記事番号26784へのコメント
渡辺金一さん
コマンドが間違ってました。

 ケース その他
  条件 (&ID<>0) 印字 &ID,<適当な区切り文字>,&名前
  代入 &名前="",&ID=[ID]
の最後の部分を
  代入 &名前=[名前],&ID=[ID]
に直して下さい。

IDが変わった時に、最初の行の[名前]を代入し忘れてました。

佐田守弘(KS-00119)
26798 書き出しできましたが表への読込みたい 渡辺金一 2004/06/25-18:58
記事番号26796へのコメント
佐田先生ありがとうございました。
ファイルは"名前.txt"に書き出されましたが、メモ帳でないと開くことが出来ません。
桐からファイル→「開く」、ファイルの種類:すべて(*.*)にして"名前.txt"を
「開く」とすると
一括処理の実行中にエラーが発生しました。
KU1090コマンドの形式に誤りがあります。
詳細 3\tA\tB\tC\tD\tE
行番号 1
というメッセージが表示されます。
又、「再定義」とすると"名前.cmd"としてメモ帳と同じ内容のものが表示され
ます。
区切り文字として\tを指定しましたが、*.CVSに変換できるのでしょうか
お教え下さい。
26802 Re:書き出しできましたが表への読込みたい 佐田 守弘 2004/06/26-00:06
記事番号26798へのコメント
渡辺金一さん
テキストファイルを書き出すのではなくて、表に書き出したかったんですね。
考え方は全く同じです。つまり、先に書き出す表を定義して開いておきます。
そして印字コマンドでテキスト出力する代りに、行追加コマンドで書き出す表に
新規の行を追加して行けばでき上がります。

表の項目名が分りませんから、このまま動くわけではありませんが、ポイントだけ
を申し上げます。

表 <書き出す表>
繰り返し (.not #終端行)
 ケース開始
  ケース ([ID]=&ID)
   &名前=&名前+"<適当な区切り文字> "+[名前]
  ケース その他
   編集表 <書き出す表>
   条件 (&ID<>0) 行追加 [ID]=&ID,[全名前]=&名前
   代入 &名前=[名前],&ID=[ID]
   編集表 <元の表>
 ケース終了
 ジャンプ 行番号=+1
繰り返し終了
終了 表

なお、テキストファイルへの書き出しで説明してしまったので、こちらの方も
補足説明しておきます。

・テキスト区切りファイルの表への取り込み
単に開いても開けません。テキスト読込で読み込めば、表に読み込めます。
(当初、私はこの形を想定しておりました)

・CSVファイル
印字開始コマンドでファイルの種類にCSVファイルを指定すればCSVファイルに
出力できます。CSVファイルもテキストファイルですから。
ただし、この場合には区切り文字にタブではなくてコンマを指定して下さい。
コンマでなければだめです。なぜかと言えば、CSVとは、Commna Separated Value
の略で、「コンマ区切りの値」という意味です。

・その他
また、K3ファイルもある種のコンマ区切り型のテキストファイルですから、印字
込まんで書き出す事も可能です。
要するに、テキスト形式(制御コードが含まれないファイルと言う意味)であれば、
殆どのファイルを桐から印字コマンドで出力できます。

佐田守弘(KS-00119)

26810 印字コマンドで:書き出し、表への読み込みできました 渡辺金一 2004/06/26-19:39
記事番号26802へのコメント
佐田先生ありがとうございます。

印字コマンドで書き出し(区切り文字を全角のコンマ)、次の読み込みコマンドで
処理できました。
読み込み テキスト,"名前一覧.TBL",区切り=",",{[ID],[名前1],[名前2],・・}
CSVファイルについては、読み込みコマンドでの確認はしていませんがExcelに読み
込み、CSVファイルに変換したファイルは桐の*.TBLに読み込みできましたので、読
み込みコマンドで可能かと思います。
表に書き出す方法を教えてもらいましたが、これから試してみます。
表 <書き出す表>
>繰り返し (.not #終端行)
> ケース開始
>  ケース ([ID]=&ID)
>   &名前=&名前+"<適当な区切り文字> "+[名前]
>  ケース その他
>   編集表 <書き出す表>
>   条件 (&ID<>0) 行追加 [ID]=&ID,[全名前]=&名前
>   代入 &名前=[名前],&ID=[ID]
>   編集表 <元の表>
> ケース終了
> ジャンプ 行番号=+1
>繰り返し終了
>終了 表
>
上記の 条件 (&ID<>0) 行追加 [ID]=&ID,[全名前]=&名前 について
表の項目名が不明のため[全名前]となっていますが項目名が、[名前1],[名前
2],・・[名前10]とした場合の表現方法をお教えいただければと思います。
よろしくお願いします。
26812 質問の主旨を取り違えていた様です 佐田 守弘 2004/06/27-03:15
記事番号26810へのコメント
渡辺金一さん
同じIDの複数データの名前を適当な区切り文字で区切ってつなぎ合わせ、
1つの項目にするのだとばかり思ってました。
[全名前]は、複数の名前をつなぎ合わせた1つの文字列の意味で使いました。
 [名前1],[名前2],・・[名前10]
というのは、1つの項目につなぐのでなくて、複数項目に横並びに並べる
意味だったのですね。
そうであれば提示した一括処理は違いました。

もちろん一括処理で行う事も可能ですが、それよりも簡単なのは、転置集計
で横並びにしてしまう方法です。

佐田守弘(KS-00119)
26817 Re:質問の主旨を取り違えていた様です 渡辺金一 2004/06/27-23:57
記事番号26812へのコメント
佐田先生、質問の仕方が不明確で申し訳ございませんでした。
最初転地集計で可能かなと思い試してみましたが、項目名に[ID],[名前]が
並び、レコード行に[ID]の番号、それに対応する[名前]の[番号]が表示され
ました(下記)
項目名  [ID] と名前の○○,××,△△,○×,○△,・・・・
レコード  1 1 2 3
2 1 2
となったものですから転地集計では無理と考えました。
今回教えていただいた一括処理で可能になりましたが、転地集計の設定の
仕方が検討不十分だったと思います。転地集計の方法を検討してみます。
渡辺金一
26838 一括処理で行う方法 佐田 守弘 2004/06/28-22:15
記事番号26817へのコメント
渡辺金一さん
作られている表のイメージをその後更に考えてみたところ、どうもやはり
転置集計ではできなさそうですね。

すでにテキストファイル経由で行う方法はできていると思いますが、一括処理
で直接表に書き込む方法について述べておきます。
基本的な流れは、#26802で書いた形とほぼ同じです。
但し、ケースコマンドの中で表に書き出す部分が違います。それから何番目の
項目に書き込むかといったポインタとして、整数型の変数「&n」を使います。
繰り返しの前と、IDが変わる時に、この値を初期化するコマンドを入れます。

さて、全体の流れはすでにお分りと思うので、
 >項目名が、[名前1],[名前2],・・
 >[名前10]とした場合の表現方法をお教えいただければと思います。
に絞っての話をします。方法は以下の様にいくつかのやり方があります。
何れでも同じ結果になりますから、分りやすい方法を選んで下さい。

●名前を配列変数に代入しておき、IDが変わったら行追加をする
この方法では文字列型で&名前[10]を定義しておきます。
そしてケース処理の部分は次の様になります。
  ケース ([ID]=&ID)
   代入 &名前[&n]=[名前], &n=&n+1
  ケース その他
   編集表 <書き出す表>
   行追加 [ID]=&ID,[名前1]=&名前[1],[名前2]=&名前[2],・・・
   編集表 <元の表>
   代入 &ID=[ID],&名前[1]=[名前],&n=2
 ケース終了
つまりIDが同じならば、&n番目の&名前[&n]に[名前]を代入しておきます。
IDが異なったら、書き出す表に切り替えて、行追加と同時にこれらの変数の
値を表に書き込み、次いで編集表を戻して、ID、名前を変数に記録して、
ポインタを2にセットします。

●項目名を変数で指定して行訂正で書き込む方法
項目名が[名前1]の様な名称であるならば、
 &項目名="名前"+#全角(#文字列(&n))
で作り出せます。
そして項目名をこの変数で指定して、
 行訂正 &項目名=&名前
の形で表の項目に書き込めます。

つまりコマンドは
  ケース ([ID]=&ID)
   代入 &名前=[名前], &n=&n+1
   代入 &項目名="名前"+#全角(#文字列(&n))
   編集表 <書き出す表>
   行訂正 &項目名=&名前
   編集表 <元の表>
  ケース その他
   代入 &名前=[名前]
   編集表 <書き出す表>
   行追加 [ID]=&ID,[名前1]=&名前
   編集表 <元の表>
   代入 &ID=[ID],&n=2
 ケース終了

●項目番号で行訂正などを行う方法
 [名前1],[名前2],・・が順序良く並んでいれば、&n番目の項目に代入
という形での行訂正が可能です。この場合には、
 行訂正 &n=&名前
の形で上記の様なコマンドを書きます。

大まかに以上の様な形になると思います。
なお実際にテストしていないので、細かい部分の挙動まで確認できてい
ません。

佐田守弘(KS-00119)
26855 ありがとうございました 渡辺金一 2004/06/29-19:34
記事番号26838へのコメント
佐田先生ありがとうございます。
一括処理で行う3種類の方法、行追加、行訂正のやり方を具体的にご説明いただき、
コマンド、変数などの使い方について勉強になりました。
今後ともよろしくご指導のほどお願いいたします。
渡辺金一

戻る