strstr 関数で教えてくださいNo.07602
kyau さん 01/02/18 19:23
 
はじめて投稿いたします。kyau と申します。


タブ区切りの用語集から用語を取得して
一括置換、という処理をするためのマクロを作成し、
一度秀丸マクロライブラリに掲載したことがあるのですが(MetaFileReplace という名
前で)、
ユーザの方から、「文字化け」が発生する、という声が寄せられました。

よくよく調べたら文字化けの原因はどうやらタブを使用した文字位置の取得にありそう
だな、
ということまではわかりました。具体的な状況を説明するのが難しいのですが、、、。

---------------------------------------------------------
//タブ区切りの用語集から文字列(タブの前の文字列とタブの後の文字列)を取得する

config "t2";

golinetop2;
#x0 = x; #y0 = y;
golineend2;

#x1 = x;

$tarline = gettext(#x0, #y0, x, y);

#key1 = strstr($tarline, "\^");
#key2 = strstr($tarline, "\t");//タブの位置を取得

$jap = gettext(#key1, #y0, #key2, #y0);//$jap は正しく取得される
$eng = gettext(#key2 + 1, #y0, #x1, #y0); //$eng に化けた文字列が格納されるこ
とがある。ここの #key + 1 という式が原因??
---------------------------------------------------------

原因がわからないので、現在はタブを、一般にはありえない他の文字列(◆◇◆◇◆◇
)に置換してから
#key2 = strstr($tarline, "◆◇◆◇◆◇");
で対応することにし、それだとまったく問題がないことがわかりました。

#key + 1 では、つまり \t の直後の文字位置を取得しようとしているのですが、
これではだめなのでしょうか?

strstr() 関数でタブを検索すること自体がまずいのでしょうか?

長文で大変申し訳ありませんが、同じ現象に遭遇された方がいらっしゃったら教えてく
ださい。



[ ]