versionCompare関数

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

引数に指定された2つのバージョン文字列を比較します。

構文
versionCompare( version1, version2, operator )
引数
version1 必須
1つ目のバージョン
version2 必須
2つ目のバージョン
operator 省略可
<<=>>==<>のいずれかの演算子
戻り値
1つ目のバージョンが2つ目のバージョンより小さい場合-1、同じ場合0、2つ目のバージョンが小さい場合1を返します。演算子を指定したときは、演算子の関係を満たす場合True、満たさない場合はFalseを返します。

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   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 < ver2ver1がver2より小さいときTrue
ver1 <= ver2ver1がver2以下ならTrue
ver1 > ver2ver1がver2より大きいときTrue
ver1 >= ver2ver1がver2以上ならTrue
ver1 = ver2ver1とver2が等しければTrue
ver1 <> ver2ver1とver2が等しくなければTrue

使い方

バージョン1214より小さいので-1を返します。

UWSC
PRINT versionCompare("12", "14")
結果
プレーンテキスト
-1

バージョンが同じなので0を返します。

UWSC
PRINT versionCompare("12", "12")
結果
プレーンテキスト
0

バージョン1412より大きいので1を返します。

UWSC
PRINT versionCompare("14", "12")
結果
プレーンテキスト
1

バージョン12.312.4より小さいので-1を返します。、

UWSC
PRINT versionCompare("12.3", "12.4")
結果
プレーンテキスト
-1

現在のUWSCのバージョンが5.0以上かを調べます。operator>=と指定されているのでGET_UWSC_VER >= 5.0の結果がブール値で返されます。

UWSC
PRINT GET_UWSC_VER
PRINT versionCompare(GET_UWSC_VER, "5.0", ">=")
結果
プレーンテキスト
5.302
True

operatorを指定するとブール値を返すので、IFB文で条件分岐を書くことができます。

UWSC
IFB versionCompare(GET_UWSC_VER, "5.0", ">=") THEN
	PRINT "UWSCのバージョンは5.0以上です。"
ELSE
	PRINT "UWSCのバージョンは5.0よりも古いバージョンです。"
ENDIF
結果
プレーンテキスト
UWSCのバージョンは5.0以上です。