大文字/小文字を区別しない比較。No.05322
辺見!真琴 さん 06/11/24 07:11
 
 HTMLエレメントを操作するマクロを書いていて思ったのですが、
"<br>"タグと"<BR>"タグを ==演算子で比較しても、当然ですが
成立しません。
 比較とは少々違いますが、strstr()ででも比較は出来ますが
大文字/小文字は区別してしまう様です。

 strcmpi()の様な区別をしない文字列比較は、自前で書くべき
なのか、それともヘルプを見落としているだけなのでしょうか。
 もし無いのなら、文字列操作/整形と言う特性上、標準で
欲しいものです。


辺見!真琴

[ ]
RE:05322 大文字/小文字を区別しない比較No.05323
IKKI さん 06/11/24 08:15
 
ユーザーの IKKI です。おはようございます。

>  strcmpi()の様な区別をしない文字列比較は、自前で書くべき
> なのか、それともヘルプを見落としているだけなのでしょうか。

現在の秀丸マクロにはありませんね。自前で書くか、田楽 DLL や
TKInfo.dll などを利用することになるかと思います。

>  もし無いのなら、文字列操作/整形と言う特性上、標準で
> 欲しいものです。

賛成です。
tolower(), toupper() があれば十分かもしれません。
#sameflag = (tolower("<br>") == tolower("<BR>"));

Windows が関数を提供しているのであれば、そのバイパス関数を
秀丸が提供するのも難しくないと思うのですが…。

[ ]
RE:05323 大文字/小文字を区別しない比較No.05324
K'zawa さん 06/11/24 09:41
 
辺見!真琴さん、IKKIさん、こんにちは。
K'zawa/ユーザーです。

>>  もし無いのなら、文字列操作/整形と言う特性上、標準で
>> 欲しいものです。
>
>賛成です。
>tolower(), toupper() があれば十分かもしれません。

私も賛成です。
素人考えですが、変換モジュールに文字列変数を渡すことができれば
いいような気がするのですが。
filter文の関数版?

[ ]
RE:05322 大文字/小文字を区別しない比較No.05325
白雲斎 さん 06/11/24 11:52
 
こんにちは 辺見!真琴 さん、白雲斎です。

小文字に統一して文字列比較をする。

call ToLower "<BR>";
if( "<br>" == $$return ) message "同じ";
else message "違う";
endmacro;

ToLower:
    $$buf = "";
    ##j = strlen($$1);
    ##i = 0;
    while( ##i < ##j )
    {
        ##c = ascii(midstr($$1, ##i, 1));
        if( ##c > 0xff )
        {
            $$buf = $$buf + midstr($$1, ##i, 2);
            ##i = ##i + 2;
        }
        else
        {
            if( ##c >= 'A' && ##c <= 'Z' ) ##c = ##c + 32;
            $$buf = $$buf + char(##c);
            ##i = ##i + 1;
        }
    }
return $$buf;

[ ]
RE:05324 大文字/小文字を区別しない比較No.05326
秀丸担当 さん 06/11/24 15:41
 

>私も賛成です。
>素人考えですが、変換モジュールに文字列変数を渡すことができれば
>いいような気がするのですが。
>filter文の関数版?

tolower, toupper, filter文の関数版、それぞれあったら便利ですね。
検討したいと思います。

[ ]
RE:05324 大文字/小文字を区別しない比較No.05335
辺見!真琴 さん 06/11/26 11:35
 

> filter文の関数版?

 見落としていた様です。
 改めてヘルプを読み直し・・・まし・・・たが、皆さんこれだけの記述で
filter文が何かが分かってしまうのですか・・・。
 標準添付の変換モジュールの正体すら、私には分かりませんでした。
 DLLを呼び出すのとは、何かが違うのですね。


辺見!真琴

[ ]
RE:05325 大文字/小文字を区別しない比較No.05336
辺見!真琴 さん 06/11/26 11:35
 

> 小文字に統一して文字列比較をする。

 わざわざ有難う御座います。
 無いなら無いで当面は自作して何とかしようと思っていましたが、有り難く利
用させて頂きます。


辺見!真琴

[ ]
RE:05326 大文字/小文字を区別しない比較No.05337
辺見!真琴 さん 06/11/26 11:35
 

> tolower, toupper, filter文の関数版、それぞれあったら便利ですね。
> 検討したいと思います。

 宜しく御願い致します。


辺見!真琴

[ ]
RE:05323 大文字/小文字を区別しない比較No.05338
辺見!真琴 さん 06/11/26 11:35
 

 御返事遅れていますm(__)m


> 現在の秀丸マクロにはありませんね。自前で書くか、田楽 DLL や
> TKInfo.dll などを利用することになるかと思います。

 毎度メーリングに投稿してから思うのですが、ヘルプ見て見付からないのなら
マクロライブラリも覗けば良いじゃん・・・とか、もう遅いですね(^^;
 TKinfo.dllは・・・利用していないので知りませんでしたが、そちらでは出来
ているのですかあ。
 しかも秀丸エディタに持って来ないのも決定済みなのですね(^^;
http://hidemaruo.dip.jp:81/turukame/turukame_3/x08869.html


 辛辣とは思いますが、秀丸マクロの個人的な印象を。
 ヘルプを読んでいて、私には秀丸マクロの特徴が見えて来ないんです。
 カーソル位置を起点に手動操作と同等の事を記述出来るようにと言うコンセプ
トは分かるのですが、テキストエディタのマクロとしての実際の文字列操作の利
便性は余り考慮していないのかな、と。
 勿論サポートは最優先事項ですから、熟慮無しに仕様を肥大化させるのは愚の
骨頂とは思います。

 でもサポートが大変なのなら、"new on 1"で新言語に切り替わる様にして仕切
り直せば良いじゃん!とも無責任に思うのです。 ←飽くまで冗談です(^^;

 今回の件も仮にマクロの仕様拡張無しに済ませるのなら、ライブラリを追加し
やすい環境、DLL拡張ではなく#includeの様な、テキストベースのリンキングも
必要だと思うのですが。
 だからそれはそれで、やはり仕様拡張ですけど(--;

 結局思考の迷路を彷徨った挙句、現状である入口に戻って来て、ある物を使っ
て知恵を絞るのが一番現実的とは思うのですけどね。


辺見!真琴

[ ]
RE:05338 大文字/小文字を区別しない比較No.05342
IKKI さん 06/11/27 00:59
 
IKKI です。こんにちは。

>  御返事遅れていますm(__)m
ご丁寧にありがとうございます m(_ _)m

>  しかも秀丸エディタに持って来ないのも決定済みなのですね(^^;
標準添付のもので済ませるなら、 HMJRE.DLL を使う手もあります。
(正規表現のメタキャラクタは事前にエスケープする必要があります)

loaddll hidemarudir + "\\HMJRE.DLL";
if (dllfunc("FindRegularNoCaseSense", "<br>$", "<BR>", 0) == 0) {
    message "同じだよ";
}
freedll;

どの方法を採るにせよ、目的に対して手段が大げさになってしまう
(目的に適した手段がない)のが悩みどころですね。

---------------------------------------------------------------------

以下、雑談につきあってみます。

>  カーソル位置を起点に手動操作と同等の事を記述出来るようにと言うコンセプ
> トは分かるのですが、テキストエディタのマクロとしての実際の文字列操作の利
> 便性は余り考慮していないのかな、と。

これは仰る通りで、私も不便を感じています。
編集バッファに影響を与えず、検索/置換も使わずに文字列を操作したければ
strstr(), leftstr(), midstr(), rightstr(), ascii(), char() ぐらいで
何とかしなければなりませんし、何ともならなければ DLL に頼るしか…。

こういうとき filter 文の関数版があったらきっと便利ですね。

>  でもサポートが大変なのなら、"new on 1"で新言語に切り替わる様にして仕切
> り直せば良いじゃん!とも無責任に思うのです。 ←飽くまで冗談です(^^;
>
>  今回の件も仮にマクロの仕様拡張無しに済ませるのなら、ライブラリを追加し
> やすい環境、DLL拡張ではなく#includeの様な、テキストベースのリンキングも
> 必要だと思うのですが。

前にそんな話題が出たこともあったような…。(^^;
http://hidemaruo.dip.jp:81/turukame/turukame_3/x07863.html#7938

>  結局思考の迷路を彷徨った挙句、現状である入口に戻って来て、ある物を使っ
> て知恵を絞るのが一番現実的とは思うのですけどね。

まぁサイトー企画さんも趣味で作ってるわけじゃないんで、結局は費用対効果の
問題でしょうね。直近の開発コストと将来のサポートコストを比較したとき、
現在のマクロ言語を肥大化させていくのと、新しい言語を導入するのとでは
どちらが有利か…?
アプリへの組み込みに適した Lua なんて言語もあるみたいですが。

[ ]