過去の桐井戸端BBS (桐ver.8)
14426 一括処理で項目属性変更2を使い項目計算式を修正していますが、どうもうまくいかない まろっぺ 2001/12/07-23:41
こんばんは。大変ご無沙汰しております。
まろっぺと申します。
困ったときの会議室頼りで大変恐縮ですが、よろしくおねがいします。

項目計算式を表で管理して、コマンド項目属性変更2で別表の項目計算式を修正したくて次のような事をやってみました。
計算式.TBLの[計算式](文字列)に項目計算式を入力しておき、TEST.TBLの項目[5]に、一括処理でその内容を計算式として設定。
項目属性変更2コマンドでは変数が指定できないので、コマンド「コマンド」でワンクッション置いて実行してます。

【計算式.TBL】
[計算式](文字列項目)項目内容="[1]+[2]+[3]+[4]" 1レコードのみ

【TEST.TBL】
[1](数値)項目内容=1
[2](数値)項目内容=2
[3](数値)項目内容=3
[4](数値)項目内容=4
[5](数値)項目内容=未定義or定義されててもOK

【TEST.CMD】
変数宣言 共通,文字列{&式}
表 計算式
   &式=[計算式]
表 TEST
   コマンド "項目属性変更2 変更,[5],{,,,,"+&式+"}"

終了

TEST.CMDを実行すると、計算式が設定される。

と、こんな感じでうまくいったのでこれは使えそうだと思ったのですが、
計算式.TBLの計算式に””を含んだ場合、動作が不定になるようです。
単純な計算式であれば一括が止まりますが、私が実装しようとしている表で試したところ、
計算式にその表の1レコード目の特定項目の内容が設定されてしまいました。
一括にしてもちょっと例外的な使い方ですが、バグと呼んでいい気もします。

K3に聞く前にどなたか御存知の方がいればと思い、アップしました。
#CONDで複雑な計算式を複数の表で使っているので、この方法で計算式が管理できれば
非常に便利に思うのですが、ここから進展がありません。
どなたかお知恵をお貸し頂けないでしょうか?
よろしくお願いします。
14434 Re:項目属性変更2で項目計算式を修正した場合の不具合 pokopon 2001/12/08-09:33
記事番号14426へのコメント
まろっぺさん こんにちは

私は同様の手法にて、一気に数十個の表ファイルの再定義をしておりますが、標記のような現象には陥った事がありません。

おそらく・・・・・
>計算式.TBLの計算式に””を含んだ場合、動作が不定になるようです。
が原因かと思います。
「"」を強制的に「""""+""」ではさんだらどうでしょうか?
こうすると、「空白や,(カンマ)」を含む場合にも対応可能と思います。

例えば【計算式.tbl】の[1]に #文字置換([あ],"い","う")となっている時には

&式 = "#文字置換([あ]," + """" + "い" + """" + "," + """" + "う" + """" + ")"

とするとか。


14443 Re:項目属性変更2で項目計算式を修正した場合の不具合 まろっぺ 2001/12/09-00:08
記事番号14434へのコメント
pokoponさん、こんにちは。
お教えありがとうございます。

早速、試してみましたがコマンド実行で、形式誤りで落ちちゃいました。
今までも納得いかないなりに何とか使ってたのですが、桐での「””」(ダブルコーテーション)の使い方の法則がいまひとつです。
文字列をくくるためと、「”」そのものを示すために3つも4つも書く必要があるんですよね。
さらにそれを変数に代入すると分かりづらいです。

本題の計算式の管理の方はもうちょっと考えて見るつもりですが、やはり桐を疑いたくなってます。
今日気づいたのですが、定義変更がうまく行かなかった表は破損してませんが、
拡張子が.$XXのワークファイルの残骸が実行後に残ってました。
やはりK3に相談しようかと思ってます。

14445 Re:単なるコマンドエラーでは? pokopon 2001/12/09-11:57
記事番号14443へのコメント
まろっぺさん こんにちは

>早速、試してみましたがコマンド実行で、形式誤りで落ちちゃいました。
この段階で、「形式誤り」でエラーとなるという事は、まさしく「”」の記述ミスかと思います。
これは、コマンド(コマンド)の実行における単なるエラーです。
&式内の値に「゛」があるのですよね。ここいらあたりが原因かと思いますが。

>今までも納得いかないなりに何とか使ってたのですが、桐での「””」
>(ダブルコーテーション)の使い方の法則がいまひとつです。
私自身も悩むところですが、下記を再度ご検討ください。

(某BBSからの引用)
>(1)文字列を囲む時に必要な前後の二重引用符を無視して文字列中の二重引用符を
2個連続にします。
>(2)次に、出来あがった文字列の前後を二重引用符で囲むというふうに考える。
>まず、前後の二重引用符を無視して文字列中の二重引用符を2個連続にします。
>次に、出来あがった文字列の前後を二重引用符で囲むというふうに考える。
>"ABC" −> ""ABC"" −> ”""ABC""”

>本題の計算式の管理の方はもうちょっと考えて見るつもりですが、やは
>り桐を疑いたくなってます。
>今日気づいたのですが、定義変更がうまく行かなかった表は破損してま
>せんが、拡張子が.$XXのワークファイルの残骸が実行後に残ってました。
>やはりK3に相談しようかと思ってます。

K3への相談の際には、元になる表ファイルと、一括(イベント)を圧縮ファイルで添付し、
検証(再現)してもらう事が大事かと思います。
使用OS、桐バージョンはもとより、使用機器の環境を正確にお伝えください。
電話での問い合わせも結構ですけど、言葉では中々伝わりにくいので、
メールにて、実際のファイルにて検証してもらうことが早期解決につながります。
K3のメールにおける対応も親切ですよ。

さて、どうも桐の不具合によるものというより、コマンドで実行されている「項目属性変更2」の単なる記述エラーという方に原因を強く感じます。
「,」がずれると、変更する箇所が変わりますから。
例えば、項目計算式の箇所ではないところに変更をかけようとしているなど。

再度、ご確認を。

変数宣言 共通,文字列{&式}
表 計算式
   &式=[計算式]
表 TEST
   コマンド "項目属性変更2 変更,[5],{,,,,"+&式+"}"

終了

において、

表 計算式
 &式=[計算式]
 &式 = "項目属性変更2 変更,[5],{,,,,"+&式+"}"
 &STR = &式
 確認 &STR
表 TEST
コマンド &式

と置いてみて、「確認」で表示されている式が「正しい」かどうか確認ください。
もちろん「,」の数もです。

次に&SRTRの内容を変数管理で「コピペ」して、コマンド &式 の代わりに、直接一括処理でそのまま記述して確かめて下さい。
&式の値が正しく、かつ、直接記述しても同様の「不具合」が生じるならば、桐の不具合も予測されます。

以上、お試しください。
14446 Re:単なるコマンドエラーでは? pokopon 2001/12/09-12:15
記事番号14445へのコメント
できましたら、
[計算式]
&式(&STR)
の値を提示願えませんか? そのままここへ「コピペ」してください。
どこがエラーなのか、文面からだけでは推測さえできません。

14463 「”」の件は単なるコマンドエラーでした。 まろっぺ 2001/12/09-21:50
記事番号14446へのコメント
pokoponさん、お世話になってます。

お言葉に甘えて、計算式をアップします。
実際は、さらにちょっとした処理を走らせてますんで、不具合が出た状態はもうちょっと複雑なんですが、問題の本質はココにあると思います。

pokoponさんのおっしゃるとおり、「”」を多用した件は単純なコマンドエラーでしたが、
その前に私が実行していた状態で発生した事象が以下の状態で再現できると思います。

【TEST.TBL】(テスト用に[レース区分1日1]項目内容=予選特賞 のレコード1件あり)
[レース区分1日1]
[T区分1日1]


【計算式.TBL】[計算式]の内容
#COND(#文字位置([レース区分1日1],"準優")>0,"準",#文字位置([レース区分1日1],"優勝")>0
.AND #文字位置([レース区分1日1],"地区")=0,"優",#文字位置([レース区分1日1],"記者選抜")>0
,"記",#文字位置([レース区分1日1],"選抜")>0,"",#文字位置([レース区分1日1],"特選")>0
,"特",#文字位置([レース区分1日1],"特賞")>0,"賞",#文字位置([レース区分1日1],"◆")>0
,[レース区分1日1],#文字位置([レース区分1日1],"覇者決定戦")>0
.or #文字位置([レース区分1日1],"名人位決定戦")>0
.or #文字位置([レース区分1日1],"王座決定戦")>0 .or #文字位置([レース区分1日1],"賞金王決定戦")>0
.or #文字位置([レース区分1日1],"王将位決定戦")>0 .or #文字位置([レース区分1日1],"海の王者決定")>0,"優",1,#U)

【TEST.CMD】
変数宣言 共通,文字列{&式}
表 計算式
   &式=[計算式]
表 TEST
   コマンド "項目属性変更2 変更,[T区分1日1],{,,,,"+&式+"}"

終了

上記条件で【TEST.CMD】を実行すると、【TEST.TBL】[T区分1日1]の計算式に「賞」だけが設定されてしまいます。
どうやら1レコード目の計算式の結果が計算式として設定されてしまうようです。
↑分かりずらいですが、分かってもらえるでしょうか?(^_^;)

これが桐の問題か、使い方が悪いのか良く分かりませんが、「”」の使い方で解決できるのが一番ですので、よろしくお願いします。<(_ _)>

14465 RE:やはり「"」が原因です pokopon 2001/12/09-22:33
記事番号14463へのコメント
まろっぺさん こんにちは

一応、トレースしてみました。

>【計算式.TBL】[計算式]の内容
>#COND(#文字位置([レース区分1日1],"準優")>0,"準",#文字位置([レース区分1日
>1],"優勝")>0 .AND #文字位置([レース区分1日1],"地区")=0,"優",#文字位置
>([レース区分1日1],"記者選抜")>0,"記",#文字位置([レース区分1日1],"選抜")
>>0,"",#文字位置([レース区分1日1],"特選")>0,"特",#文字位置([レース区分1日
>1],"特賞")>0,"賞",#文字位置([レース区分1日1],"◆")>0,[レース区分1日1],#文
>字位置([レース区分1日1],"覇者決定戦")>0 .or #文字位置([レース区分1日
>1],"名人位決定戦")>0 .or #文字位置([レース区分1日1],"王座決定戦")>0 .or #
>文字位置([レース区分1日1],"賞金王決定戦")>0 .or #文字位置([レース区分1日
>1],"王将位決定戦")>0 .or #文字位置([レース区分1日1],"海の王者決定")
>>0,"優",1,#U)

まさか、こんなに複雑とは・・・・・。ふ〜っ。 (@_@)

さて、単なる#文字位置でを拾っての条件分けです。
どうしても「"」が気になるのでしたら、
(全て文字列で、「,」や「"」が直接データとして使われていませんので)
文字列を区別するための「""」を全て取り去っても大丈夫です(正道ではありませんが)。
ただし、未定義値を入力する際には "" ではなく #U 関数を使ってあげて、

#COND(#文字位置([レース区分1日1],準優)>0,準,#文字位置([レース区分1日1],優勝)>0
.AND #文字位置([レース区分1日1],地区)=0,優,#文字位置([レース区分1日1],記者選抜)>0
,記,#文字位置([レース区分1日1],選抜)>0,#U,#文字位置([レース区分1日1],特選)>0
,特,#文字位置([レース区分1日1],特賞)>0,賞,#文字位置([レース区分1日1],◆)>0
,[レース区分1日1],#文字位置([レース区分1日1],覇者決定戦)>0
.or #文字位置([レース区分1日1],名人位決定戦)>0 .or #文字位置([レース区分1日1],王座決定戦)>0
.or #文字位置([レース区分1日1],賞金王決定戦)>0 .or #文字位置([レース区分1日1],王将位決定戦)>0
.or #文字位置([レース区分1日1],海の王者決定)>0,優,1,#U)

とし、


【TEST.CMD】
変数宣言 共通,文字列{&式}
表 計算式
   &式=[計算式]
表 TEST
   コマンド "項目属性変更2 変更,[T区分1日1],{,,,," + """" + &式 + """" + "}"

終了

とすれば、正常に計算項目が変更されました。

もっと、条件式を簡素化できませんか? 表引きするなど・・・・・。

(これって、競馬? (^^ゞ )

結論:桐の不具合ではありません!!

14471 出来ました。 まろっぺ 2001/12/10-22:26
記事番号14465へのコメント
pokoponさん、ありがとうござます。
うまく行きました。

面倒な計算式で申し訳ありませんでした。
文字列だけなら「”」省略可能でしたね。基本的な事を忘れてました。
まだまだ修行不足です。(;_;)
ダブルコーテーションの使い方も暇を見て理解しておこうと思ってます。

ただ、ダブルコーテーションの使い方間違ったからって、1レコード目の計算式の結果が計算式になってしまう理由は??です。

>もっと、条件式を簡素化できませんか? 表引きするなど・・・・・。

う〜ん...確かに私も簡素化したいのですが、入力データから割り出す方法が今の所、これしかないんです。
でも、この一括のおかげで管理がとても楽になります。
別表での管理とか(正規化ってやつ)も考えましたが、AND OR条件が入り混じってますんで断念しました。

>(これって、競馬? (^^ゞ )

競馬じゃなくて競艇です。でも、お仕事ですよ。
ホビーであまり複雑な事はしたくないです。(^_^;)

ありがとうございました。

14475 Re:出来ました。 うにん 2001/12/11-08:40
記事番号14471へのコメント
まろっぺさんは No.14471「出来ました。」で書きました。

>う〜ん...確かに私も簡素化したいのですが、

ちょっとだけですが、#文字位置()>0という条件は>0を省略可能です。

14477 Re:トレースの徹底を pokopon 2001/12/11-08:58
記事番号14471へのコメント
まろっぺさん こんにちは

うまく解決できたようですね。

>ただ、ダブルコーテーションの使い方間違ったからって、1レコード目の
>計算式の結果が計算式になってしまう理由は??です。

ですので、
 &式 = "項目属性変更2 変更,[5],{,,,,"+&式+"}"
 &STR = &式
としてみて、&STR の中身を確認していただければ、どこがどうおかしかったのかす
ぐにわかります。

&STR = "A"

&STR = """" + "A" + """"

は結果が違いますし、

&STR = """" + "A" , "B" , "C" + """"

ではエラーとなります。

&STR の中に 「"A","B","C"」とそのまま代入する方法が今回の問題点でした。

是非とも、ご確認下さい。



14484 よく分かりました!! まろっぺ 2001/12/11-21:45
記事番号14477へのコメント
pokoponさん、うにんさん、
ごていねいにありがとうございます。

これで「”」の使い方もよく分かりました。
もっとひどい計算式も、やむを得ず幾つか使ってますが、「”」の使い方と>0の省略で少し楽になりそうです。

ありがとうございました。_(._.)_
14485 Re:よく分かりました!! うにん 2001/12/12-12:29
記事番号14484へのコメント
>これで「”」の使い方もよく分かりました。

ついでながら、&計算式に「”」が入っている可能性があるときは、

代入 &コマンド="項目属性変更 変更,[変更する項目],{,,,,,,"""+#文字置換(&計算式,"""","""""")+"""}"
コマンド &コマンド

とすれば大丈夫なはずです。

戻る