過去の桐井戸端BBS (桐ver.9)
27928 一括処理でテーブルIDの名前を別のテーブルに書き出ししたが最終行が書き出せない 渡辺金一 2004/10/11-18:22
桐 V9 初心者です

A.TBL([ID]長整数値、[名前]文字列、・・)の同じ[ID]の名前をB.TXTに書き出しに下記のコマンドで行ったのですが、
最終行が書き出せない。
A.TBLのデータ
[ID] [名前]
1 あ
1   い
3   う
4 え
4   か

表 "A.TBL"
代入 &ID=0
印字開始 "B.TXT"
繰り返し (.not #終端行) 
ケース開始
 ケース([ID]=&ID)
  &名前=&名前+","+[名前]
 ケース その他
  条件 (ID=<>0) 印字 &ID,",",&名前
  代入 &ID=[ID],&名前=[名前]
ケース終了
ジャンプ 行番号=次行
繰り返し終了
印字終了
表 "C.TBL"
読み込み テキスト "B.TXT",区切り=",",{[ID],[名前1],[名前2],・・}

B.TXTとC.TBLのデータ
[ID] [名前1] [名前2] [名前3] ・・・・[名前10]
1   あ    い
3   う
4   え    お ← このレコードの書き出しができない 

A.TBLの最終行(レコードが一つの場合も同じ)と最終行とその前行に同じ[ID]が複数ある場合もうまくいきません。
ご指導のほどよろしくお願いします。

  
27929 Re:テーブルIDの名前を別のテーブルに書き出したい ももこ 2004/10/11-20:42
記事番号27928へのコメント
最終行の[ID]が前行と同じ場合、&名前に最終行の[名前]が追加されますが、そのまま
ジャンプ 行番号=次行が実行され、最終行は印字されないまま
繰り返し終了になってしまいます
また、最終行の[ID]が前行と異なる場合も、前行までの印字コマンドは実行されますが
最終行のデータは印字されないままジャンプのコマンドが実行されます

繰り返し終了コマンドの後に
印字 &ID,",",&名前
を挿入すれば大丈夫です

27930 Re:テーブルIDの名前を別のテーブルに書き出したい 悲しげ 2004/10/11-23:27
記事番号27928へのコメント
IDが同じなのに名前が違うと云うのは、言葉としては、少々
違和感があったりしますが、それはさておき(^^;)

> 条件 (ID=<>0) ・・・

条件式としては「=<>」とは普通は書かないですよね。(^^;)

> ケース その他

が即ち ケース([ID]<>&ID) なのだから、多分

ケース開始
 ケース([ID]=&ID)
  &名前=&名前+","+[名前]
 ケース その他
  印字 &ID,",",&名前
  &ID=[ID],&名前=[名前]
ケース終了

と書きたかったのかもしれませんが、それではももこさんが
仰るように、[ID]=&IDが1レコードしかない場合には印字されないので、
ではここで発想をちょっとだけ逆転させて

ジャンプ 行番号=1
&ID=[ID],&名前=[名前] /*★*/
印字開始 "B.TXT"
 繰り返し(.not #終端行) 
  ケース開始
  ケース([ID]<>&ID)
   印字 &ID,",",&名前
   &ID=[ID],&名前=[名前]
  ケース その他
   &名前=&名前+","+[名前]
  ケース終了
  ジャンプ 行番号=次行
 繰り返し終了
印字終了

ではどうでしょう?(未検証ですが)

もちろん

  ケース開始
  ケース([ID]=&ID)
   &名前=&名前+","+[名前]
  ケース その他
   印字 &ID,",",&名前
   &ID=[ID],&名前=[名前]
  ケース終了

と書いても同じですけど(ポイントは★印の行です)。

27932 Re:テーブルIDの名前を別のテーブルに書き出したい 悲しげ 2004/10/12-01:29
記事番号27930へのコメント
訂正。

>ジャンプ 行番号=1
>&ID=[ID],&名前=[名前] /*★*/
>印字開始 "B.TXT"
> 繰り返し(.not #終端行) 
>  ケース開始
>  ケース([ID]<>&ID)
>   印字 &ID,",",&名前
>   &ID=[ID],&名前=[名前]
>  ケース その他
>   &名前=&名前+","+[名前]
>  ケース終了
>  ジャンプ 行番号=次行
> 繰り返し終了
>印字終了

だと1行目がダブってしまうので(?)

ジャンプ 行番号=1
&ID=[ID],&名前=[名前] /*★*/
ジャンプ 行番号=+1
印字開始 "B.TXT"
 繰り返し(.not #終端行) 
  ケース開始
  ケース([ID]<>&ID)
   印字 &ID,",",&名前
   &ID=[ID],&名前=[名前]
  ケース その他
   &名前=&名前+","+[名前]
  ケース終了
  ジャンプ 行番号=次行
 繰り返し終了
印字終了

かな?
う〜ん、何だか泥沼っぽく・・・・。(^^;)

27933 Re:テーブルIDの名前を別のテーブルに書き出したい うにん 2004/10/12-08:54
記事番号27930へのコメント
変数に保存するのは[ID]だけの方がすっきりするのでは?

  ケース開始
  ケース([ID]=&ID)
   印字 ","+[名前],
  ケース その他
   印字
   印字 [ID],",",[名前],
   &ID=[ID]
  ケース終了
 繰り返し終了
 印字

27934 Re:テーブルIDの名前を別のテーブルに書き出したい 渡辺金一 2004/10/12-09:05
記事番号27932へのコメント
>訂正。
>
>ジャンプ 行番号=1
>&ID=[ID],&名前=[名前] /*★*/
>ジャンプ 行番号=+1
>印字開始 "B.TXT"
> 繰り返し(.not #終端行) 
>  ケース開始
>  ケース([ID]<>&ID)
>   印字 &ID,",",&名前
>   &ID=[ID],&名前=[名前]
>  ケース その他
>   &名前=&名前+","+[名前]
>  ケース終了
>  ジャンプ 行番号=次行
> 繰り返し終了
>印字終了
>
条件式 条件 (&ID=<>0)は(&ID<>0)記載ミスで失礼しました。
試してみましたが、最終行の抽出が出来ませんでした。繰り返し終了コマンドの後に
ももこさんご指摘の 印字 &ID,"."&名前 を挿入するとうまくいきました。
同じIDのレコードがランダム配置されているデータ数百件について試したところ同じIDが
すべて抽出されなく予め並び替えを行ったあとでは問題ありませんでした。

ももこさん、悲しげさん有難うございました。
27937 Re:テーブルIDの名前を別のテーブルに書き出したい 悲しげ 2004/10/12-12:28
記事番号27933へのコメント
うにんさん wrote

>変数に保存するのは[ID]だけの方がすっきりするのでは?
>
>  ケース開始
>  ケース([ID]=&ID)
>   印字 ","+[名前],     (1)
>  ケース その他
>   印字           (2)
>   印字 [ID],",",[名前],  (3)
>   &ID=[ID]
>  ケース終了
> 繰り返し終了
> 印字

あ、この方がすっきりシンプルですね。
で、ちょっと解説を加えておきます>渡辺さん江

「印字」コマンドの記述の最後に、半角カンマを付けておくと
改行コードを出力しないので、次はそのまま右端にデータを
追加させることができます。
(1)と(3)がそれに当たります。
逆に、半角カンマを付けないと改行コードを出力しますから、
上記の(2)は、単に改行コードだけを出力させていると云うことです。

ps.
このような場合に、処理に先だってID順とかに並べ替えておくのは、自明の前提です。

27938 ありがとうございました 渡辺金一 2004/10/12-13:04
記事番号27937へのコメント
ももこさん、悲しげさん、うにんさん ありがとうございました。
変数に保存するのは[ID]だけで処理できました。解説までつけていただき
たいへん勉強になりました。ありがとうございました。

戻る