本ページには広告が含まれています。
指定した位置に見つかった文字列を置換します。
- 構文
- String = strReplace( search, replace, string, occurrence )
- 引数
- search 必須
- 探したい値
- replace 必須
- 見つかったsearchを置き換える値
- string 必須
- 置換の対象となる文字列
- occurrence 省略可
- 置換したい位置
- 戻り値
- 置換後の文字列
プログラム
//////////////////////////////////////////////////
// 【引数】
// 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番目だけ置換ということができません。
PRINT REPLACE("生麦生米生卵", "生", "ゆで")
- 結果
ゆで麦ゆで米ゆで卵
strReplace関数は置換したい位置を指定することでその位置だけを置換することができます。第四引数に指定した位置に見つかった生をゆでに置換します。
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番目に見つかった位置の生をゆでに置換します。
DIM search = "生"
DIM replace = "ゆで"
DIM string = "生麦生米生卵"
PRINT strReplace(search, replace, string, -1)
PRINT strReplace(search, replace, string, -2)
PRINT strReplace(search, replace, string, -3)
- 結果
生麦生米ゆで卵 生麦ゆで米生卵 ゆで麦生米生卵