過去の桐井戸端BBS (桐ver.9)
19164 項目の中身をわけてその分行数を増やしたい 桐使いになりたい 2003/03/03-19:01
こんにちは。またまたお世話になりたいです。
桐で、下記のようなことができる計算式はあるのでしょうか?

[品名]の項目毎に、[地域]の項目を各[品名]毎に、ばらばらにしたいのです。
[品名]ほうは、不特定多数の地域が入ってますが、「,」で区切られています。

項目名 [品名]      [地域]
    リンゴ   長野県,福島県,青森県
    ミカン   和歌山県,愛媛県
        ↓

    リンゴ   長野県
    リンゴ   福島県
    リンゴ   青森県
    ミカン   和歌山県
    ミカン   愛媛県

お知恵をお借りしたいです。よろしくお願いいたします。

19165 Re:項目の中身をわけたい 今村 誠 2003/03/03-19:24
記事番号19164へのコメント
桐使いになりたいさんこんにちは、
桐のヘルプを見て以下の言葉の意味を調べて応用してみてはいかがでしょうか。
一括処理で、繰り返しを使い、
コンマの文字数を文字置換で導き出し
行退避と行追加と行復旧と行訂正を繰り返すと
うまくいくのではないでしょうか。
一括処理を作るときは履歴の機能を使い、
ひな形を作ると、参考になると思います。
19166 Re:項目の中身をわけたい 桐使いになりたい 2003/03/03-19:42
記事番号19165へのコメント
今村 誠さん

ありがとうございます。がんばってやってみます。

19167 Re:項目の中身をわけたい 悲しげ 2003/03/03-20:46
記事番号19164へのコメント
どもっ、桐使いになりたいさん
カンマ区切りで入っていると云うことは、「#対応文字列」関数を使って取り出すのが定石だと思います。
私なら次のような一括処理でやると思います。
---------------------
ジャンプ 行番号=先頭
印字開始 "仮称作業.txt"
 繰り返し(.not #EOF)
  &i=1
  繰り返し
   &地域=#対応文字列([地域],&i)
   条件(&地域="") 繰り返し中止
   印字 [品名],"ξ",&地域
   &i=&i+1
  繰り返し終了
  ジャンプ 行番号=+1
 繰り返し終了
印字終了
---------------------
こうすると、"仮称作業.txt"の中味は
---------------------
リンゴξ長野県
リンゴξ福島県
リンゴξ青森県
ミカンξ和歌山県
ミカンξ愛媛県
---------------------
のようなテキストになっている筈なので、これを区切り文字"ξ"と
して、テキスト読み込みさせることができます。
このテキスト読み込み過程も一括処理でやるとよいのですが、
今回はファイル名も不明なので、省略しました。

補足
1)区切り文字として"ξ"を使ったのは、データの中に有り得ない文字としての想定。
2)あ、挙動未確認です。(^^;)
3)今回はたまたま半角カンマ区切りで入っていたのでやりやすかったけれど、
他の字句であればそれをいったん半角カンマに#文字置換してから#対応文字列を使うこともあります。
19173 悲しげさんに習ってサンプルを 今村 誠 2003/03/03-22:56
記事番号19166へのコメント
var 整数{&行番号,&繰返数,&終了判定} /* 表編集中に一括を呼びだせます*/
表 "果物", モード=専有, 終了状態=&終了判定
 繰り返し &行番号=1,#総件数 /* 絞り込んだ状態でも実行できます*/
  ジャンプ 行番号=&行番号 /* 繰返毎に自動で変数に1が足されます*/
  行退避   /* 項目数やデータ型に関係なくメモリーに保存されます*/
  &繰返数=#文字数([地域])-#文字数(#文字置換([地域],",",""))
  行訂正 [地域]=#対応文字列([地域],&繰返数+1)
   繰り返し (&繰返数>0)
    行追加 終了状態=&終了判定
    ジャンプ 行番号=前行
    行復旧 破棄=しない
    行訂正 [地域]=#対応文字列([地域],&繰返数)
    &繰返数=&繰返数-1
   繰り返し終了
 繰り返し終了

19178 Re:項目の中身をわけたい うにん 2003/03/04-08:48
記事番号19164へのコメント
>桐で、下記のようなことができる計算式はあるのでしょうか?

こういう行数を増やすようなのは計算式では無理で、他の方の回答のように一括処理を使うのが普通です。

一括処理を使わず結合表を使う方法を紹介します。

元の表に、数値型の計算項目を一つ追加します。
項目名 計算式
数値  #文字数([地域])-#文字数(#文字置換([地域],",",""))+1

この項目を項集計して最大値を記録しておきます。

連番.tblという表を作ります。項目は1つだけです。
項目名 データ型
連番  カウンタ
さっきの最大値の行数分のレコードを追加しておきます。

以上2つの表の結合表を定義します。
結合条件は指定しません。
表示項目名 所属対象表 項目/計算式 抽出 絞り込み条件1
品名    元の表.tbl 品名     レ  
地域    (計算項目) #対応文字列(["元の表.tbl".地域],["連番.tbl".連番])  レ
連番    連番.tbl  連番        ["元の表.tbl".数値]≧[]

連番.tblの行数を減らすと、[地域]にいくら入っていても最初の3つだけ取り出す、ようなこともできます。
(行数が多い分には問題ありません。番号が1から連続になるように。)
19180 Re:項目の中身をわけたい 桐使いになりたい 2003/03/04-10:46
記事番号19178へのコメント
こんにちは。桐使いになりたいです。
うにんさんの、結合表の方法を試してみました。
実は、一括処理が苦手(単に勉強不足です…。他の皆様申し訳ありません。)で、どうしようと思っていました。
すごいです。一発でできました。ありがとうございました。

戻る