さて。
普通に来たらreplace関数の解説な訳ですが・・・
「どうせreplace関数のややこしい説明すんだろ・・・」
と思ってたそこの貴方!
ぶっちゃけreplace関数はプログラムでは滅多に使いません(笑
使う事は殆ど無い(普通は正規表現置換使うので)ので完全に理解する必要はありませんが
「覚えておくと便利」程度の気軽な気持ちで読んで構いません。
※注:replace関数は正規表現ではありません。
だから解説しないでおこう・・・・・・
なんて思うわけありません。(結局説明するのかよ
という訳でreplace関数の仕様。
仕様・・・・
仕様・・・。
残念ながら余り利用しないので詳しく知らなかったり(ぁw
という訳で参考書を引っ張り出しつつ・・・
replace
[置換元文字列],[置換文字列],[置換後文字列](,[開始位置],[置き換え数],[比較方式])
で、これ異常にややこしい訳です。
※以下真剣な解説ですがネタにしかなりえません。簡潔に説明するのでそっちを理解して下さい・・・
まぁようは、
[置換元文字列]の中に[置換文字列]が存在した場合、[置換後文字列]に置き換えるんだけど、
[置換元文字列]の中の[置換文字列]の[開始位置]個目から[置き換え数]個だけ[置換後文字列]に置き換えますよと。
んでもって[開始位置]個目以前の[置換文字列]は除去されますよと。
・・・・まぁ理解できる訳ないですね。
これは相当ややこしい。
とりあえず[比較方式]は指定しないで下さい。
プログラミングを相当理解してないと、理解は厳しいです。
ちなみに・・・
「テキスト比較」「バイナリィ比較」「データベース比較」モードがあるようです。
まず
"あいうえおあいうえおあいうえお"
という文字列があります。
この時、
src="あいうえおあいうえおあいうえお"
だとします。
まずは簡単な使い方。
result=replace(src,"あ","か")
「src」の中から「"あ"」という文字列を検索し「"い"」に置き換えます。
よって・・・
result="かいうえおかいうえおかいうえお"
となります。
この時、「src」は「"あいうえおあいうえおあいうえお"」のままです。
ちょっと難しくして、(「src」は「"あいうえおあいうえおあいうえお"」のままですよ。)
result=replace(src,"あい","か")
「src」の中から「"あい"」という文字列を検索し「"い"」に置き換えます。
よって・・・
result="かうえおかうえおかうえお"
となります。
次に[開始位置]ですが・・・
開始位置は、
result=replace(src,"あい","か",2)
この時「src」を左から見ていくと、最初が「"あい"」となっていますが
「置き換えるのは「2」つめ」からと指定しているので最初は置き換えずにそのまま・・・
だったらややこしくなくて良かったんですけどね(笑
開始位置を指定した場合、
「そこ個数に到達するまでに見つかった文字列は除去され」
てしまうんです。
どういう事か・・・?
replace関数は文字列を左から順に眺めていくので、
この場合最初の2文字で「"あい"」が合致します。
合致しますが合致した文字列を除去するので・・・・
result="うえおあいうえおあいうえお"
そして左から順に見ていくと2個目の「"あい"」があります。
今回は開始位置を2と指定しているので、ここからは「"か"」に置き換わります。
結果的に、
result="うえおかうえおかうえお"
となるのです。
最後に[置き換え個数]ですが
これは開始位置に比べれば簡単で「いくつ置き換えるか」を指定します。
例えば、([開始位置]は指定せず省略してます。)
result=replace(src,"あい","か",,2)
となっていた場合、
srcの中には「"あい"」が3つありますが、
置き換えるのは「2つ」と指定しているので左から2個が置き換えられ、
最後の1個は無視されます。
よって、
result="かうえおかうえおあいうえお"
となります。
※参考までに・・・
replace関数の動作を分解して見ました(何
2009/1/26 23:30
ミスってたので修正しました。
replace("a","b","c",1,2)
とした場合に
replace(src,target,dest,start,count)
という名前の変数に値が入る物とします。
("a"がsrcという変数に、"b"がtargetという変数に・・・)
また、結果はresultという変数に格納します。
if
esc<>"" then
esc=src
result=""
if
(len(esc)>=len(target)) then
do until
len(esc)<len(target)
if
left(esc,len(target))=target then
if count<>0 then
if start>1
then
esc=right(esc,len(esc)-len(target))
start=start-1
elseif
start=1 then
result=result &
target
count=count-1
else
msgbox("プロシージャの呼び出しが不正〜")
exit do
end if
else
exit do
end if
else
result=result &
left(esc,1)
esc=right(esc,len(esc)-1)
end if
loop
result =
result & esc
else
result=
esc
end if
end if
これで合ってるはずですが・・・
関数や構文について解説をすると、
len(x):「x」の文字数を取得
left(x,y):「x」を左から「y」文字分切り出す
right(x,y):「x」を右から「y」文字分切り出す
mid(x,y,z):「x」を「y」文字目から「z」文字分切り出す。
do
until
[条件式]
[処理]
loop
[条件式]がTrue(0以外の数値)になるまで
[処理]を繰り返す。