過去の桐井戸端BBS (桐ver.5)
8024 同じ[生月][組]に属するすべての生徒名を連結して項目にできますか。 oshino 2000/10/09-22:00
桐v5で作った以下のような誕生日の表があります。
●生徒名簿.TBL
主な項目…[組]、[番号]、[生日]、[生月]、[氏名]
+----+------+------+------+--------------------+
| 1 | 15 | 18 | 1 |ななしのごんべえ |
| 1 | 22 | 18 |  1 |へのへのもへじ |
| 2 | 1 | 3 | 1 |あらあらら |
| | | | | etc. |


上記の表をつかって以下のような帳票を作りたいのです。

+------+---------------+-----------------------------------------+
|[生月]| [組] | [氏名][生日] |
+------+----------------+---------------------------------------+
| 1 | 1 | ななしのごんべい 18  へのへのもへじ 18|
| | | |
| | | |
| +----------------+--+-------------------------------------+
| | 2 | あらあらら    3   どらえもん 12|
| | | etc. |

ここで、生徒氏名を横2人ずつ表示させることは不可能ですか。
もし、同じ[生月][組]に属するすべての生徒氏名を連結し、さらに上記のように
[生日]も付け加えた一つの項目ができればできそうな気もするのですがその方法がとんと思い付きません。
どなたかヒントを教えて下されば幸いです。
よろしくお願いします。

途中に作業用の表を介在させても、一括処理でも何でもいいです。

追伸 1〜2人なら1行、3〜4人なら2行、5〜62人なら3行というようにデータ行数が可変になると、尚いいです。

8026 Re:同じ[生月][組]に属するすべての生徒名を連結して項目にできますか。 宮城 2000/10/10-10:39
記事番号8024へのコメント
ここまで指定されていると一括処理直に書いたほうが早いのですが、まあ、頭の体操みたいなものですか。

行数云々は氏名・生年が2項目で改行と判断します。そして、ブランク行を2行入れる、と。

ただし、なぜこんな表が必要になるかから書かれたほうが、有益とは思いますよ。

以下、元の表(あ.TBLとします。)、生月と組だけの表(い.TBLとします。)、
作成しようという表(う.TBL)の三つの表が登場しますのでご注意をば。

生月と組で整列し、単一化後、これら2項目だけを書き出すことにより、どれだけの組合せがあるかを把握します。

基本はこの表を先頭行から最終行まで移動しながら以下の作業を繰り返す。

生月と組を変数にとり、あ.TBLに移り、都度選択解除しながら選択し直す。

この選択行内部でまた先頭行から最終行まで繰り返し。

項目値を変数に代入。ただし、

[氏名・生日]=[氏名]+" "+#文字列([生日])

2行目は

[氏名・生日]=[氏名・生日]+"  "+[氏名]+" "+#文字列([生日])

とし、最終行か2行目でう.TBLに行追加、[氏名・生日]をヌルクリア。最終行ではブランク行を行追加。

整列の便宜を考えて、生月・組連番と生月・組内連番も振っておいた方が賢明でしょう。

8029 複数行のデータ項目を連結 佐田 守弘 2000/10/10-12:07
記事番号8026へのコメント
oshinoさん
これは直前の#8011でkazさんが質問されている処理の全く反対の処理ですね。
一括処理を使わないとできません。

宮城さんが
>ただし、なぜこんな表が必要になるかから書かれたほうが、有益とは思いま
>すよ。
と書かれておられますように、比較的珍しい処理方法でしょう。

と言いましても、この様な処理が必要になる場合がたまにあります。
その例としては、
@郵政省の郵便番号のつなぎとバラし処理
私のサイト、および宮城さんのサイトにほぼ同じものが掲載されています。
質問の目的とかなり似た処理をしております。
A同じ会社の担当者名をまとめる
これは私の「桐で作る名刺管理」で使っています。

目的によって、一括処理の書き方が変わると思います。

佐田守弘(KS-00119)

8043 Re:複数行のデータ項目を連結 oshino 2000/10/11-03:47
記事番号8029へのコメント
佐田 守弘さんフォローありがとうございました。
宮城さん、ありがとうございます。
宮城さんのアドバイスにしたがって一括をかいてみましたが、
う.TBLに くだんのデータが入ってきません。

なお、ここでは宮城さんの表名にしたがいました。つまり元の表(あ.TBLとします。)、生月と組だけの表(い.TBLとします。)、
作成しようという表(う.TBL・・・項目は[生月]、[組み]、[氏名誕生日]にしてあります。)

>生月と組を変数にとり、あ.TBLに移り、都度選択解除しながら選択し直す。
>この選択行内部でまた先頭行から最終行まで繰り返し。
どうもこのあたりのところで、編集対照表がない、といわれてしまいます。

ご教授をよろしくお願いします。

なお、正直申しましてせっかく宮城さんが教えてくださっている下記の部分
>項目値を変数に代入。ただし、
>[氏名・生日]=[氏名]+" "+#文字列([生日])
>2行目は
>[氏名・生日]=[氏名・生日]+"  "+[氏名]+" "+#文字列([生日])
は正確にわかっていないような気がします。

また
>とし、最終行か2行目でう.TBLに行追加、[氏名・生日]をヌルクリア。最終
>行ではブランク行を行追加。
>整列の便宜を考えて、生月・組連番と生月・組内連番も振っておいた方が賢
>明でしょう。
は、理解できませんでした・・・。


変数宣言 整数{&CNT2,&CNT1,&tuki,&kumi,&day}
変数宣言 文字列{&name,&nameday}

トレース 確認
 表 "い"  
選択 行数=-1
 &CNT2=&選択件数
 繰り返し &CNT1=1,&CNT2,1
  位置指定 行番号=&CNT1    
  &tuki=#項目属性(1,0),&kumi=#項目属性(2,0)
表 "あ"
  選択 [生月]{&tuki}
  選択 [組]{&kumi}


  &CNT2=&選択件数

  繰り返し &CNT1=1,&CNT2,1
    位置指定 行番号=&CNT1 ←編集対象表がない、といわれてしまいました。
    &name=#項目属性(4,0),&day=#項目属性(28,0)
&nameday=&name+" "+#STR(&day)
&nameday=&nameday+" "+&name+" "+#STR(&day)
      
表 "う"
位置指定 行番号=最終
  行挿入 [生月]=&tuki,\
      [組]=&kumi,\
      [氏名誕生日]=&nameday
終了 表 
 繰り返し終了

  選択解除 
繰り返し終了


8045 Re:複数行のデータ項目を連結 宮城 2000/10/11-14:24
記事番号8043へのコメント
oshinoさん、昔お世話になった先輩に「押野さん」というかたがいらっしゃり、
なんやかんやで、ここまでやるか気味ですが。変数と項目もまちがい書いたし。

>どうもこのあたりのところで、編集対照表がない、といわれてしまいます。

編集表 表名

というコマンドをレフェランスで確認して下さい。しかし、「編集対照表がない」
というメッセージが出るとは思えませんが・・・。

強制改行文字を使ったほうがいいのかなとも思いましたが、レコードを分ける仕様としています。
諸先輩方の前でどうも気が引けますが・・・。

う.TBLを定義しておいてください。項目は以下。

生月組連番  整数
生月組内連番 整数
生月     整数
組      整数
氏名・生日  文字列

以下、続く。
8046 Re:複数行のデータ項目を連結 宮城 2000/10/11-14:26
記事番号8045へのコメント
変数宣言 整数{&組¥
       ,&番号¥
       ,&生日¥
       ,&生月¥
       ,&生月組件数¥
       ,&生月組連番¥
       ,&生月組内件数¥
       ,&生月組内連番¥
       ,&生月組内カウンタ¥
       ,&レコード替判断キー¥
       }
変数宣言 文字列{&氏名¥
        ,&氏名生日¥
        ,&氏名生日表示¥
        }

*まず、「う.TBL」を空にします。

表 "う"
行削除 *,圧縮

*私が最初に書いていたことです。これが項目をつなぎたい単位のはずですね。

表 "あ"
整列 "あの整列",{[生月],[組]}
選択 単一化={[生月],[組]}
書き出し 表,"い",{[生月],[組]}
&生月組件数=#総件数
選択解除

*以下、この「い.TBL」を1行ずつ処理していきます。「変数に取る」とは次の
*代入のつもりでした。

表 "い"
位置指定 行番号=先頭
繰り返し &生月組連番=1,&生月組件数
 代入 &生月=[生月]¥
   ,&組=[組]
 *
 *ここで「あ.TBL」に移り、つなぎたい最初の組合せを選択します。
 *選択 [生月]{&生月}というのは非公式なるもV5では使えます。
 *
 編集表 "あ"
 選択 [生月]{&生月}
 選択 [組]{&組}
 代入 &生月組内件数=#総件数¥
   ,&氏名生日表示=""¥
   ,&生月組内連番=0
 *
 *選択されたレコードをこれまた1件ずつ処理します。
 *
 繰り返し &生月組内カウンタ=1,&生月組内件数
  代入 &番号=[番号]¥
    ,&生日=[生日]¥
    ,&氏名=[氏名]¥
    ,&氏名生日=[氏名]+" "+#文字列([生日])¥
    ,&レコード替判断キー=#MOD(&生月組内カウンタ,2)
  *
  *&レコード替判断キーが1の時だけ、連結用変数をセットします。
  *
  ケース開始
   ケース(&レコード替判断キー=1)
    &氏名生日表示=&氏名生日
  ケース終了
  ケース開始
   *
   *&レコード替判断キーが0の時(つまり、2行目に移ったら)、連結して「う.TBL」
   *に移り、行追加します。
   *
   ケース(&レコード替判断キー=0)
    代入 &生月組内連番=&生月組内連番+1¥
      ,&氏名生日表示=&氏名生日表示+"  "+&氏名生日
    編集表 "う"
    行追加 [生月組連番]=&生月組連番¥
       ,[生月組内連番]=&生月組内連番¥
       ,[生月]=&生月¥
       ,[組]=&組¥
       ,[氏名・生日]=&氏名生日表示
    代入 &氏名生日=""
   *
   *レコード件数が奇数、かつ、最終行の場合、単独で「う.TBL」に移り、行追加します。
   *
   ケース(&生月組内カウンタ=&生月組内件数)
    代入 &生月組内連番=&生月組内連番+1
    編集表 "う"
    行追加 [生月組連番]=&生月組連番¥
       ,[生月組内連番]=&生月組内連番¥
       ,[生月]=&生月¥
       ,[組]=&組¥
       ,[氏名・生日]=&氏名生日表示
    代入 &氏名生日=""
  ケース終了
  編集表 "あ"
  位置指定 行番号=次行
 繰り返し終了
 *
 *組合せの終わりに2行ブランク行を入れます。
 *
 編集表 "う"
 代入 &生月組内連番=&生月組内連番+1
 行追加 [生月組連番]=&生月組連番¥
    ,[生月組内連番]=&生月組内連番
 代入 &生月組内連番=&生月組内連番+1
 行追加 [生月組連番]=&生月組連番¥
    ,[生月組内連番]=&生月組内連番
 編集表 "あ"
 選択解除
 編集表 "い"
 位置指定 行番号=次行
繰り返し終了

8047 Re:複数行のデータ項目を連結 宮城 2000/10/11-14:28
記事番号8046へのコメント
連番は奇異に思われるかもしれませんが、表をいじっているうちに元の並びに戻したいということが出てきたりするものです。
特にここではブランク行をいれてますので。
DBを扱うときの「お約束」みたいなものです。もちろん単純連番でもかまわないでしょう。
二階層にしているのは私の趣味。

あの、まちがってもすらすらとは組んでませんから。書き出しはどうじゃ? 
表に取り込めていない項目は書きだせん、行追加しかないか、とかやってます。
まったく、「編集表」ですら、「編集対象表」と書いてしまったり。

とっかかりになってくれたらと思っております。

8048 Re:複数行のデータ項目を連結 oshino 2000/10/11-20:56
記事番号8047へのコメント
>あの、まちがってもすらすらとは組んでませんから。書き出しはどうじゃ? 表に取り
>込めていない項目は書きだせん、行追加しかないか、とかやってます。
早速の3連発レス、まことにありがとうございます。
これから、「名前をつけて保存」させてもらってからゆっくりと読ませていただきます。

まずは御礼かたがたアップさせてもらいます。
ちなみに私のハンドルネーム「oshino」は名前の「しのぶ」からとったものですので
宮城さんのおっしゃっている方とは違いますので・・・はい。

8049 Re:複数行のデータ項目を連結 宮城 2000/10/12-00:35
記事番号8048へのコメント
ふふふ・・・。一回だけはまねをする。

汎用性がまったくありませんので、以後質問ありましたら、ダイレクトにメールしてください。

戻る