« タイムショックプラグイン | トップページ | 月屑 »

2007年8月31日 (金)

名前。待望のバージョンダウン。

XSI 用リネームツール「名前。」が、v2.5 から v2.4 へ待望のバージョンダウン。
http://homepage3.nifty.com/jjj/XSIFiles/Plugin/JJJ_XSI_Plugins.html

検索&置換の大文字小文字を区別する機能が、働かないどころか悪さをすることが判明。勝手にこれでよいと思っていたアルゴリズムが、まったくの勘違いだった。勘違いどころか、かすりもしない、悪さもする(リネーム後の名前を勝手に全部小文字にしてしまう)、ダメ男でした。

とりあえず大文字小文字は常に区別されるという仕様に変更。
機能していなかったとは言え機能を削ったので、バージョンダウンということにしましょう。
シロートはこれだから困る・・・。Orz

本当は、

元の文字列 --> Hoge_Hoge
検索文字列 --> hoge
置換文字列 --> Hage
実行結果   --> Hage_Hage

となるようにしたいんですね。元の文字に含まれる Hoge と検索文字列である hoge は大文字小文字の違いだけなので同一の文字であるとみなして、Hage に置換したいのです。

どなたか、大文字小文字を区別せずにほげほげはげはげに置換するアルゴリズムを教えてください。当方、シロートです。本業プログラマではありません。おそらくは基本的なことであろうこんなこともわからないくらいのシロートなのです。シロートにもわかるように教えてください。シロートにもわかるように教えて下さった方には、なんと生ビール1杯を進呈させて頂きます。

|

« タイムショックプラグイン | トップページ | 月屑 »

コメント

はじめまして通りすがりに失礼します。
試してませんがjscriptならこんな感じで出来た記憶が

var s1 = "Hoge_Hoge"
var s2 = "hoge"
var s3 = "Hage"

var re1 = new RegExp(s2,"ig");
Logmessage (s1.replace(re1,s3) );

投稿: 善 | 2007年9月 1日 (土) 09時26分

善さま

わっ ほんとだっ できたっ 
ご親切にありがとうございますっ

ええと、RegExp って正規表現とかいうやつですか。調べたことはあるんだけど、なにやらお経のような呪文のような恐ろしい文字が延々と連なっていて、これはきっと自分が踏み込んではならない悪魔の領域なのだ、これが読めるようになってしまうとこっちの世界には戻って来れないんだ、と勝手に思い込んで避けておりました。
と言いながらも、意味がわからないままネットで見つけたものをパクっていくつかの自作ツールの中にも使っていますね。やっぱりちゃんと勉強しないとダメでしょうか。ああ恐ろしい。そのまま XSI のスクリプトエディタにペーストしたらちゃんと はげはげ になっていたので、びっくりしました。やはり悪魔の呪文だ。

核心は

var re1 = new RegExp(s2,"ig");

この行だと思うのですが、ええと、new とか書いてあるから RegExpオブジェクトというものを作るという意味なのかしら。ig ってのは、ええと、ignore case とかの略なのかしら。


この行を日本語で言うと、


re1 という新しいRegExpオブジェクトを宣言するぞ。
そしてそのRegExpの中身には、
「s2 に入ってる文字列を今後比較する場合、
大文字小文字は区別しないぜ」
っていう規則を割り当てるぞ文句あるか


で、合ってますか?


Logmessage (s1.replace(re1,s3) );

この行の意味はわかります。でも自分は、replace(a,b)の a と b には直接文字列を指定する以外の使い方をしたことがなかったと思います。RegExp とやらが使えるという認識はありませんでした。ううむ、悪魔だ。


すいません、もろもろ調べないまま書いています。勘違いがあれば指摘してください。


見ず知らずの自分に対して救いの手(悪魔の手)を差し延べてくれてありがとうございました。生ビール1杯はめでたく善さまがゲットされました。ええと、どのようにご提供したらよろしいでしょうか。どちらにお住まいでしょうか。私は東京です。生ビールを宅配便で送るのは難しいと思われます。この場合の生ビールは非加熱処理のビールという意味ではなく、ビアホールなどで提供される隆々と泡が立ったジョッキ注ぎたてのビールというものを想定していたからです。相談しましょう。

投稿: junki | 2007年9月 1日 (土) 14時53分

無事動いたようでなによりです。
ビールはマジだったんですかw
私は名古屋なのでちょっと無理ですね。
残念です。また機会があったらで

RegExpは言われてるとおり正規表現です。
正規表現は普段はほとんど使いませんが
文字操作するときは知っていると
すごく便利ですよ。
私は簡単な部分しか覚えてなくて
細かいことはそのつど調べてる程度ですが。

var re1 = new RegExp(s2,"ig");
これの意味はだいたいあってます。
"ig"でちょっと補足ですが
これのiは大文字小文字無視
でgはヒットしたもの全部の意味です。
当然"i"や"g"で単独で使えます。

で今気が付いたのですがRegExp使うと
副作用があって正規表現が使えて
しまいます。
正規表現で特別な意味がある文字は
全てxsiでObjectの名前に使えない文字
だったと思うので問題ないと思いますが、
問題出るようなら正規表現で特別な意味が
ある文字を\でエスケープしてください
(\を\\みたいに)

副作用の正規表現ですが、
s2を下のように変えると
^hoge 先頭のhoge
hoge$ 末尾のhoge
hoge|hage hogeとhage両方
とか出来てrenameのときには多分便利です。

投稿: 善 | 2007年9月 1日 (土) 19時50分

うぉぉお 超ありがとうございます。

なるほど、呪文のような文字はそういう意味なのですね。これは使えるな。

ということでもう悪魔の領域に入りました。今日から人間辞めます。


ビールはいつかおごらせて頂きます。約束守りたいです。ご縁があるといいですね。

投稿: junki | 2007年9月 1日 (土) 21時49分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/16299204

この記事へのトラックバック一覧です: 名前。待望のバージョンダウン。:

« タイムショックプラグイン | トップページ | 月屑 »