本ページには広告が含まれています。
引数に指定された2つのバージョン文字列を比較します。
- 構文
- versionCompare( version1, version2, operator )
- 引数
- version1 必須
- 1つ目のバージョン
- version2 必須
- 2つ目のバージョン
- operator 省略可
- <、<=、>、>=、=、<>のいずれかの演算子
- 戻り値
- 1つ目のバージョンが2つ目のバージョンより小さい場合-1、同じ場合0、2つ目のバージョンが小さい場合1を返します。演算子を指定したときは、演算子の関係を満たす場合True、満たさない場合はFalseを返します。
プログラム
//////////////////////////////////////////////////
// 【引数】
// version1 : 1つ目のバージョン
// version2 : 2つ目のバージョン
// operator : <、<=、>、>=、=、<>のいずれかの演算子
// 【戻り値】
// 1つ目のバージョンが2つ目のバージョンより小さい場合-1、同じ場合0、2つ目のバージョンが小さい場合1を返します。演算子を指定したときは、演算子の関係を満たす場合True、満たさない場合はFalseを返します。
//////////////////////////////////////////////////
FUNCTION versionCompare(version1, version2, operator = EMPTY)
DIM array1 = SPLIT(version1, ".")
DIM array2 = SPLIT(version2, ".")
IFB LENGTH(array1) <> LENGTH(array2) THEN
RESULT = ERR_VALUE
EXIT
ENDIF
IFB operator = EMPTY THEN
FOR i = 0 TO UBound(array1)
IFB array1[i] < array2[i] THEN
RESULT = -1
EXIT
ELSEIF array1[i] > array2[i] THEN
RESULT = 1
EXIT
ENDIF
NEXT
RESULT = 0
ELSE
FOR i = 0 TO UBound(array1)
IFB array1[i] <> array2[i] THEN
RESULT = EVAL("array1[i] " + operator + " array2[i]")
EXIT
ENDIF
NEXT
IFB POS("=", operator) THEN
RESULT = TRUE
ELSE
RESULT = FALSE
ENDIF
ENDIF
FEND
//////////////////////////////////////////////////
// 【引数】
// inputs : 繰り返す文字列
// multiplier : inputsを繰り返す回数
// 【戻り値】
// inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
DIM res = ""
FOR n = 1 TO multiplier
res = res + inputs
NEXT
RESULT = res
FEND
//////////////////////////////////////////////////
// 【引数】
// arrayname : 上限値を求める配列の名前
// dimension : 返す次元を示す整数
// 【戻り値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
比較演算子
operatorで利用できる比較演算子は以下の表のとおりです。
比較演算子 | |
---|---|
ver1 < ver2 | ver1がver2より小さいときTrue |
ver1 <= ver2 | ver1がver2以下ならTrue |
ver1 > ver2 | ver1がver2より大きいときTrue |
ver1 >= ver2 | ver1がver2以上ならTrue |
ver1 = ver2 | ver1とver2が等しければTrue |
ver1 <> ver2 | ver1とver2が等しくなければTrue |
使い方
バージョン12が14より小さいので-1を返します。
PRINT versionCompare("12", "14")
- 結果
-1
バージョンが同じなので0を返します。
PRINT versionCompare("12", "12")
- 結果
0
バージョン14が12より大きいので1を返します。
PRINT versionCompare("14", "12")
- 結果
1
バージョン12.3が12.4より小さいので-1を返します。、
PRINT versionCompare("12.3", "12.4")
- 結果
-1
現在のUWSCのバージョンが5.0以上かを調べます。operatorに>=と指定されているのでGET_UWSC_VER >= 5.0の結果がブール値で返されます。
PRINT GET_UWSC_VER
PRINT versionCompare(GET_UWSC_VER, "5.0", ">=")
- 結果
5.302 True
operatorを指定するとブール値を返すので、IFB文で条件分岐を書くことができます。
IFB versionCompare(GET_UWSC_VER, "5.0", ">=") THEN
PRINT "UWSCのバージョンは5.0以上です。"
ELSE
PRINT "UWSCのバージョンは5.0よりも古いバージョンです。"
ENDIF
- 結果
UWSCのバージョンは5.0以上です。