---- Support BBS ----
[00696] 2007 byte
投稿日時: 2002年10月17日(木) 22時14分2秒
ホスト名: PPPa617.osaka-ip.dti.ne.jp(210.159.129.117)
Re: newcontrolとsetstringについて
まさおさん、はじめまして。
> (1) ddepoke "newcontrol", "edit,edit1,"+$str1"
> では、$str1の先頭が半角の"、'、 (半角スペース)であると
> 読み込まれません。たとえば、edit1に「"123」を読込もうと
> すると、edit1には「123」しか表示されません。
「"」「'」「 」(半角のスペース) は引数の区切り子と
みなされるのでそのような動作になります。
詳細については田楽サーバのヘルプの
「リファレンスマニュアル」→「コマンドに渡す引数の指定の注意」
を参照していただくこととして、とりあえず以下のようにすれば
ほぼOKだと思います。
$quote_char = "";
#quoting = 0;
if (strstr($str1, " ") != 0 ||
strstr($str1, ",") != -1) {
// 半角スペースまたはカンマが含まれている場合
#quoting = 1;
}
#has_dquote = strstr($str1, "\"");
#has_squote = strstr($str1, "'");
if (#has_dquote != -1 && #has_squote != -1) {
// $str1 に1重及び2重引用符が含まれている場合
if (#quoting) {
message "現在の田楽サーバの仕様ではこの文字列を正確に指定できません。";
}
} else if (#has_dquote != -1) {
// $str1 に2重引用符だけが含まれる
$quote_char = "'"; // 1重引用符で括る
} else if (#has_squote != -1 || #quoting != 0) {
// $str1 に1重引用符だけが含まれるか、両方とも含まれないが括る必要がある
$quote_char = "\""; // 2重引用符で括る
}
ddepoke "newcontrol", "edit,edit1," + $quote_char + $str1 + $quote_char;
> また、マシンによっては(あるいは、秀丸の設定によるのかも
> 知れませんが)、最後の「3」も消えることがあります。
こちらは田楽サーバのバグかもしれません。調べてみます。
> (2) ddeexecute ("setstring edt2 "+$str2);
> では、$str2の文字列の途中に半角スペースがあると、
> その半角スペースの前までしか読込まれません。
(1) と似たような話ですが、これも半角スペースが引数の区切りと
みなされるためです。上のルーチンで $str1 を $str2 に変えたものを
使えば、これも解決できると思います。
#仕様の欠陥があることは認識していますが、マクロサーバとの
互換性をなるべく取ろうとした結果、今の仕様に落ち着いています。
将来的には引数解析ルーチンの動作を変えるコマンドを
用意しようとは思っていますが…。
<694> newcontrolとsetstringについて (まさお) 10/17 02:02
└>696< Re: newcontrolとsetstringについて (杉浦 まさき) 10/17 22:14
└<698> Re: newcontrolとsetstringについて (まさお) 10/18 03:28
└<699> Re: newcontrolとsetstringについて (杉浦 まさき) 10/19 17:43
---- Support BBS ----