strReplace関数

本ページには広告が含まれています。

指定した位置に見つかった文字列を置換します。

構文
  1. String = strReplace( search, replace, string, occurrence )
引数
search 必須
探したい値
replace 必須
見つかったsearchを置き換える値
string 必須
置換の対象となる文字列
occurrence 省略可
置換したい位置
戻り値
置換後の文字列

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   search : 探したい値 
//   replace : 見つかったsearchを置き換える値 
//   string : 置換の対象となる文字列 
//   occurrence : 置換したい位置 
// 【戻り値】
//   置換後の文字列 
//////////////////////////////////////////////////
FUNCTION strReplace(search[], replace[], string, occurrence = 0)
	SELECT TRUE
		CASE RESIZE(search) = -1 AND RESIZE(replace) = -1
			IFB occurrence = 0 THEN
				RESULT = REPLACE(string, search, replace)
			ELSE
				RESULT = substrReplace(string, replace, POS(search, string, occurrence), LENGTH(search))
			ENDIF
		CASE RESIZE(search) <> -1 AND RESIZE(replace) = -1
			FOR item IN search
				string = REPLACE(string, item, replace)
			NEXT
			RESULT = string
		CASE RESIZE(search) = -1 AND RESIZE(replace) <> -1
			FOR item IN replace
				string = substrReplace(string, item, POS(search, string, occurrence), LENGTH(search))
			NEXT
			RESULT = string
		CASE RESIZE(search) <> -1 AND RESIZE(replace) <> -1
			RESIZE(replace, RESIZE(search))
			FOR i = 0 TO UBound(search)
				string = REPLACE(string, search[i], replace[i])
			NEXT
			RESULT = string
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します 
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   string : 置換したい文字列を含んだ文字列 
//   replace : 置換する文字列 
//   offset : 置換開始位置を1から指定。正の数の場合、置換はstringのoffset文字目から始まります。負の数の場合、置換はstringの終端文字からoffset文字目から始まります。 
//   length : 正の数の場合、置換される部分の長さを表します。負の数の場合、置換を停止する位置がstringの終端から何文字目かを表します。この引数が省略された場合、stringの終端まで置換されることになります。lengthが0の場合、stringからoffsetの位置にreplaceが挿入されます。 
// 【戻り値】
//   結果の文字列 
//////////////////////////////////////////////////
FUNCTION substrReplace(string, replace, offset, length = EMPTY)
	IF offset < 0 THEN offset = LENGTH(string) + offset + 1
	SELECT TRUE
		CASE length = EMPTY
			RESULT = COPY(string, 1, offset - 1) + replace
		CASE length >= 0
			RESULT = COPY(string, 1, offset - 1) + replace + COPY(string, offset + length)
		CASE length < 0
			RESULT = COPY(string, 1, offset - 1) + replace + COPY(string, LENGTH(string) + length + 2)
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND

使い方

指定した置換位置に見つかった文字列を置換

文字列を置換する関数は標準関数のREPLACE関数 (スクリプト関数)がありますが、この関数は見つかった文字列のすべてが置換されてしまい指定した位置の文字列だけを置換するということができません。例えば以下の生麦生米生卵の場合すべてのゆでに置換されてしまい、1番目だけ置換、2番目だけ置換ということができません。

UWSC
PRINT REPLACE("生麦生米生卵", "生", "ゆで")
結果
プレーンテキスト
ゆで麦ゆで米ゆで卵

strReplace関数は置換したい位置を指定することでその位置だけを置換することができます。第四引数に指定した位置に見つかったゆでに置換します。

UWSC
DIM search = "生"
DIM replace = "ゆで"
DIM string = "生麦生米生卵"

PRINT strReplace(search, replace, string, 1)
PRINT strReplace(search, replace, string, 2)
PRINT strReplace(search, replace, string, 3)
結果
プレーンテキスト
ゆで麦生米生卵
生麦ゆで米生卵
生麦生米ゆで卵

置換位置を後ろから指定

置換する文字列の位置を後ろから探す場合は、マイナス値を指定します。以下のプログラムは後ろから1番目,2番目,3番目に見つかった位置のゆでに置換します。

UWSC
DIM search = "生"
DIM replace = "ゆで"
DIM string = "生麦生米生卵"

PRINT strReplace(search, replace, string, -1)
PRINT strReplace(search, replace, string, -2)
PRINT strReplace(search, replace, string, -3)
結果
プレーンテキスト
生麦生米ゆで卵
生麦ゆで米生卵
ゆで麦生米生卵