2010年3月8日月曜日

たけうちとおるさんの19)検索置換を読む 最後

ちとオフ会やら何やらあり、間が空きました。。。
で、、、勉強したことを忘れた。。。orz

読み直して復習と最後のつぶやき
for(var N = 0; N < selecount;N++){
//selecount分繰り返す

var myObj = mySele[N];
//複数選択の意? ちなみに"var"は"variable"の略

var mypageitem_type = myObj.typename;
//複数選択のtypenameプロパティ

if(mypageitem_type == "TextFrame"){
//複数選択のtypenameプロパティ(属性)がTextFrameの場合

var myContents = myObj.contents;
//contents はプロパティ

var replaceContents = myContents;
/*replaceメソッドのことだと推測されるが、絵本にはreplace()で記述されている
次行の一括処理のためなのだろう*/

for(var i = 0;i < findrepAry.length;i++){
/*i < findrepAry ; i++ ではなく
i < findrepAry.lengthなのがわけわかめ(高度なのね)
findrepAryは0~9を含んでないの?
そういえばnew Array(0)になってたしね*/

var findrep = findrepAry[i].split(",");
//split()は文字列を配列に分割するメソッドだが、この場合は違うよな?

var regStr = "/"+findrep[0]+"/g"
//gフラグはPerlのgと同じと思うが、スラッシュと+findrep[0]+が分からん

var replaceContents = replaceContents.replace (findrep[0], findrep[1]);
//んっ? replace (findrep[0], findrep[1]);とあるから
split()は文字列を配列に分割するメソッドで
findrep[0]は1番目の全角数字を
findrep[1]は2番目の半角数字に置換することだよな

で、一番分からんのが右と左で同じreplaceContentsが使われている
左は置換後のreplaceContentsで、右は置換前のreplaceContentsだよな? 何で?*/

//var replaceContents = replaceContents.replace (eval(regStr), findrep[1]);//正規表現の場合はこちらを使用。
//ここはスルーさせていただきます

}
if(myContents != replaceContents){
// !=は≠(等しくない)の意
myObj.contents = replaceContents;
//ここで置換処理するようだ
}
}
}
}

う~ん、むずかしいです(^^;A
雄さんのオフ会に来られていたくらたさんとお話しをしたのですが、スクリプトに長けた方はJavaScriptから入ったわけではなく、その前に別な言語でやってらした方ばかりです。
そんなわけで全くのアチキみたいな人間が、スクリプトを読み解こうとしてもやっぱ無理があるみたいです。
で、くらたさんの作品は初心者が読んでも読み解けるとのことでしたので、次回からはくらたさんの作品を読み解かせていただきます^^

ps.アチキの15年後の世代の方って小学生の時からBasicをやってるのね(特別だと思いたい)。

1 件のコメント:

たけうちとおる さんのコメント...

ちょっとおかしな事をしているのですが

var myContents = myObj.contents;
var replaceContents = myContents;

で選択された文字列をmyContentsに入れてさらにreplaceContentsにそれを入れています。
(replaceContentsはメソッドではありません。)
これで同じ内容の変数が2つできます。このうち片方に検索置換処理をします。

というのも最後にIllustratorに差し替える時に検索前と検索後と比較して同じならば入れ替えないようにするためです。必要のないのにコンテンツを入れ替えるとトラブルの元となりますので。


var replaceContents = replaceContents.replace (findrep[0], findrep[1]);

はおっしゃるとおり
左は置換後のreplaceContentsで、右は置換前のreplaceContentsです。検索置換をforの繰り返して上書していきますので

文字列Aを検索置換(0を0に)して
結果を文字列Aにセットして
その結果の
文字列Aを検索置換(1を1に)して
結果を文字列Aにセットして
その結果の
文字列Aを検索置換(2を2に)して
結果を文字列Aにセットして

と繰り返していきます。常に文字列Aに上書しないと最初の検索置換が元に戻ってしまうというわけです。

で最後に
myObj.contents = replaceContents;

でIllustratorにもどしているというわけです。
なかなかうまく説明できなくて申し訳ないです。

今後とも宜しくお願いします。