過去の桐井戸端BBS (桐ver.9)
17970 連続する項目にある文字列が含まれていれば別項目にコピーしていくというようなことをしたい 工藤 2002/11/18-13:37
基本的なことで申し訳無いのですが…
以下のような処理を行いたいと考えています。

1.レコード中の連続する項目、(仮に[a1]〜[a10] とします)に、"ZZZ" という文字列が含まれているか先頭から確認してゆく。
2.含まれていれば、別項目(仮に[a0])にコピー。含まれていなければ次の項目に移動。
3.項目が途中(仮に[a5])でも、全件確認できたら処理を強制終了。

#IF や、変数を組み合わせればよいのでしょうが、具体的なアイデアがまとまらず、
また、試す時間も無い為皆さんのお知恵を拝借したいのです。
横着なお願いで本当にすみませんが、是非お願い致します。

別件ですが、一括処理を学ぶとして、書籍でお勧めのものがありますか?
それとも、地道にサンプルを参照したり、このようなHPを参照するのが以外に近道なのでしょうか。

17971 Re:if文の書き方 うにん 2002/11/18-15:35
記事番号17970へのコメント
工藤さん

[a1]〜[a2]とすると、
置換 [a0]=#条件選択(#文字位置([a1],"ZZZ"),[a1],#文字位置([a2],"ZZZ"),[a2])

[a10]までなら#条件選択の中を10回にすればいいです。
レコードごとに処理するので、「3」の強制終了は特に必要ありません。

17973 Re:一括処理の書き方 悲しげ 2002/11/18-16:28
記事番号17970へのコメント
流石はうにんさん、
確かに置換で出来るものは置換でやってしまう方が簡単かつ高速ですね。
でも、工藤さんは一括処理の勉強をしたいみたいなので、あえて一括処理の例を書いてみます。
「if」コマンドも確かに使いますが、この場合のポイントは
「繰り返し」コマンドの使い方になろうかと思います。
これを二重に使います。
ひとつは項目を[a1]から[a10]まで「横」に繰り返す。
もうひとつは先頭行から最終行まで「縦」に繰り返す。
あと使っている関数は#項目番号、#項目属性、#文字位置くらいでしょうか。
-------------------------------------------------------
変数宣言 固有,長整数{&項目番号,&始項目番号,&終項目番号} \
     ,固有,文字列{&項目値}
表 "某表.tbl"
置換 [a0]="" /*不要かも*/
&始項目番号=#項目番号("a1"),&終項目番号=#項目番号("a10")
ジャンプ 行番号=1  /*不要かも*/
繰り返し(.not #終端行)
 繰り返し &項目番号=&始項目番号,&終項目番号
  &項目値=#項目属性(&項目番号,0)
  if(#文字位置(&項目値,"ZZZ")>0)
   行訂正 [a0]=&項目値
   繰り返し中止
  end
 繰り返し終了
 ジャンプ 行番号=次行
繰り返し終了
表形式編集 ガイド="結果を確認して下さい。"
-------------------------------------------------------

成書とかHPについては、多分、幅田さん辺りからコメントがあると思います。
が、基本的には「地道に」みようみまねでしょうね。
「以外に」でも「意外に」でもなく。(^^;)

17977 Re:一括処理の書き方 幅田 2002/11/18-20:39
記事番号17973へのコメント
>成書とかHPについては、多分、幅田さん辺りからコメントがあ
>ると思います。が、基本的には「地道に」みようみまねでしょ
>うね。「以外に」でも「意外に」でもなく。(^^;)

悲しげさんの「呼び出し」コマンドにより、出てきた幅田です。
同じツリーの中で、違う話題はなるべくご遠慮いただきたいのですが、
呼び出されてしまったのでコメントします。

桐について書かれた本については、
http://www.nsknet.or.jp/~habata/kiri6hon.htm
にいろいろ紹介しておりますが、
一括処理については、v8用の本もありますが、入門者には
桐v7時代の本のほうがいいようです。
(廃刊になってるものもあるので注意が必要)

それより、同じプログラムを組むにしても、
桐にはイベントという方式もあり、
それについて書かれた本は今のところ見あたりません。
(管理工学より出されている本は単にコマンドの詳細な説明が書いてあるだけです)

イベントについては、
【多遊】さんのHP
http://www2u.biglobe.ne.jp/~s_tanaka/index.htm

ONnojiさんのHP
http://www.geocities.co.jp/SiliconValley-Bay/7565/
などが、とても参考になります。

一度ご覧になってみてください。

17979 Re:if文の書き方 工藤 2002/11/19-10:56
記事番号17971へのコメント
>[a1]〜[a2]とすると、
>置換 [a0]=#条件選択(#文字位置([a1],"ZZZ"),[a1],#文字位置([a2],"ZZZ"),[a2])
>
>[a10]までなら#条件選択の中を10回にすればいいです。
>レコードごとに処理するので、「3」の強制終了は特に必要ありません。
>

なるほど、「条件選択」を使うと『置換』で済むのですね。
ありがとうございました。

ちなみにこの処理、項目数にすると30項目なのですが、
これはもう30回分繰り返すしかないのでしょうか。
17980 Re:一括処理の書き方 工藤 2002/11/19-11:15
記事番号17973へのコメント
>流石はうにんさん、
>確かに置換で出来るものは置換でやってしまう方が簡単かつ
>高速ですね。

納得です。

>でも、工藤さんは一括処理の勉強をしたいみたいなので、あ
>えて一括処理の例を書いてみます。

ありがとうございます。
ついつい皆さんの知識に頼ってしまいがちなので、
少しは自分でも勉強しなくては、と思っています。

あと、誤字が多くてすいません。
何分仕事中だったもので、慌ててしまいました。

17981 Re:一括処理の書き方 工藤 2002/11/19-11:19
記事番号17977へのコメント
>同じツリーの中で、違う話題はなるべくご遠慮いただきたいのですが、

すいません、確かにその通りだと思います。
今後は気をつけます。

数多くの参考図書、HPをご紹介頂きありがとうございました。
参考にさせて頂きます。

17983 Re:if文の書き方 うにん 2002/11/19-13:34
記事番号17979へのコメント
工藤さん

>ちなみにこの処理、項目数にすると30項目なのですが、
>これはもう30回分繰り返すしかないのでしょうか。

そうです。その辺が計算式の弱点ですね。
今回のは#条件選択の中に入れる式が短いので、30回位ならコピペでどうにかなるかもしれませんが、
もうちょっと複雑だと一括処理のループで処理するか、
どうしても置換でやりたければ計算式自体を一括処理のコマンドで生成するとかしたほうがいいかも。

データの中に","がなく、30項目分連結しても文字列長の限界を越えないという前提で、
むりやり作るとこんな計算式。

#計算(#代入
(&STR,","+[1]+","+[2]+","+[3]+","+[4]+","+[5]+","+[6]+","+[7]+","+[8]+","+[9]+","+[10]+","+[11]+","
+[12]+","+[13]+","+[14]+","+[15]+","+[16]+","+[17]+","+[18]+","+[19]+","+[20]+","+[21]+","+[22]+","
+[23]+","+[24]+","+[25]+","+[26]+","+[27]+","+[28]+","+[29]+","+[30]),#代入(&昭和年,#文字位置
(&STR,"ZZZ")),#条件選択(&昭和年,#計算(#代入(&STR,#部分列(&STR,1,&昭和年)),#代入(&選択件数,#文字数
(&STR)-#文字数(#文字置換(&STR,",",""))),#項目属性(&選択件数,0))))

連結してしまえばifの判定が1回でいいという原理です。
連結した文字列から"ZZZ"の位置を探し、そこまでにある","の数から項目番号を計算し、その項目の値を引っ張ります。
","がデータにある場合は代りに他の文字列も使えますが(^^;

戻る