---- Support BBS ----
[ 前の記事 | 次の記事 | 一覧 ]

[00696] 2007 byte
投稿日時: 2002年10月17日(木) 22時14分2秒
ホスト名: PPPa617.osaka-ip.dti.ne.jp(210.159.129.117)

Re: newcontrolとsetstringについて

投稿者: 杉浦 まさき
e-mail: (入力されていません)
   URL: (入力されていません)

まさおさん、はじめまして。

> (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 ----