要望:HmJre.dllに置き換えの関数追加No.05733
santoku さん 10/05/18 17:34
 
ヒットしなかった場合は引数文字列をそのまま返す関数の追加を要望します。

$s = dllfuncstr("Sub", "b+", "abab", "X", 0);  // 最初のヒットを置き換え
$s = dllfuncstr("GSub", "b+", "abab", "X", 1); // すべて置き換え

param4: 大文字小文字の区別オプション

コンパイルエラーも引数をそのまま返すこととし、エラーは"FindRegular"の戻り値
で判定するか、専用の関数を用意する。
#n = dllfunc("Compile", "");        // 直前のコンパイル結果
#n = dllfunc("Compile", "[\t ]+");  // 引数パターンのコンパイル結果

要望理由:

ReplaceRegularは、ヒットしなかった場合、空文字を返します。
たとえば、以下の文では空文字が返ってきます。

$text = "\t\t"; // "text";
$s = dllfuncstr("ReplaceRegular", "^[\t ]+|[\t ]+$", $text, 0, "", 1);

空文字が返ってくると、それは置き換えた後の文字列なのか、ヒットしなかった結果
の文字列なのか、コンパイルエラーなのかを判定せねばならず、厄介でありどうも納
得できません。

・コンパイルエラー
    エラーなのだから、値が不正になるのは仕方がない(マクロ作者の責任)。

・ヒットしなかった
    何も置き換えしなかったと言う置き換えの結果が欲しい
    (巷のスクリプト系は、引数文字列をそのまま返す)

[ ]
RE:05733 要望:HmJre.dllに置き換えの関No.05736
秀まるお さん 10/05/18 20:45
 
 一応、ご希望のことは既存のHmJre.dllの関数呼び出しの組み合わせでなんと
かなると思います。

 まず、Compile関数については、FindRegular関数の返り値が-2が返るかどうか
で分かります。

    if( dllfunc("FindRegular", $pattern, "", 0 ) == -2 ) {
        message "コンパイルエラー";
    }

 のような具合です。

> 空文字が返ってくると、それは置き換えた後の文字列なのか、ヒットしなかった結果
> の文字列なのか、コンパイルエラーなのかを判定せねばならず、厄介でありどうも納
> 得できません。

 これも、コンパイルエラーなのかどうかは上記方法で判定出来ると思います。

   $s = dllfuncstr("ReplaceRegular", $pattern, ... );
   if( $s == "" ) {
       if( dllfunc("FindRegular", $pattern, "",  0 ) == -2 ) {
           message "コンパイルエラー";
       } else {
          //ヒットしてない
       }
   }

 ということでどうでしょ?

 ReplaceRegular関数の返り値を、「コンパイルエラーなら置換元文字列そのま
まにする」という風にしたとしても、果たしてその返った文字列がコンパイルエ
ラーによって置換されなかったのか、ヒットしなくて置換されなかったのか、ヒ
ットして置換も実行されたけども結果として元の文字列と同じになったのか、ど
っちにしても分からないままだと思います。なので、どっちにしても何らかの方
法でコンパイルエラーを調べる処理が必要になると思います。
 (コンパイルエラーも配慮するとしたら)

[ ]
RE:05736 要望:HmJre.dllに置き換えの関No.05762
santoku さん 10/05/26 18:41
 
コンパイルエラーを(エラーのないことを確認済みで)無視すれば、dllfuncstr()一
文で置き換えができ、他のスクリプト系と同じような感覚で使用できると思ったので
すが、残念です。

[ ]