説明
数値を2進数、3進数、または4進数に変換し、その各桁の数字を各桁に相応した幅が0のスペースへ置き換えます。(画面上で見えなくなります)
スペースの文字コードは、数値を2進数、3進数、または4進数に変換した各桁に相応したスペースの文字コードが割り当てられおり、フィールドの索引をUnicocdeへ変更する事で、数値順でソートするコトができます。
応用として、このスペースで始まるフィールドを値一覧の第2フィールドとして使用すれば、ソート順を数値で自由に設定できます。
例えば、値一覧で、第2のフィールドとして使いたいフィールドの文字列の左に追加しておくと、並び順を自由に設定できます。
function(関数):
ZeroWidthSpaces ( 数値 ; 基数 ; 桁数 )
Sample input(入力例):
"A" & ZeroWidthSpaces ( 10 ; 2 ; 4 ) & "Z"
Sample output(出力例):
"AChar(8204)Char(8203)Char(8204)Char(8203)Z"
A と Z の間に、幅が0(画面上で見えない)のスペース(Char(8204)、Char(8203))が入力されています。矢印キーの連打で確認できます。
formula(式):
//
// ZeroWidthSpaces ( 数値 ; 基数 ; 桁数 )
// 画面上で見えないスペースを作る。索引をUnicodeに変更し、ソートする
While (
[
i = 数値 ;
base = 基数 ; // 2、3、4 を指定。大きいほど、桁数が小さくなる
width = 桁数 ; // 桁数 log ( 数値の最大値 ) / log ( base ) より大きい整数を指定 、
// 基数が2ならば、数値が最大1000ならば10以上を指定する。
// 最大1000 で、数値は10^60まで対応可能です。
code = ""
] ;
Length ( code ) < width ;
[
code = Mod ( i ; base ) & code ;
i = Div ( i ; base )
] ;
Substitute (
code ;
[ "0" ; Char(8203) ] ;
[ "1" ; Char(8204) ] ;
[ "2" ; Char(8205) ] ;
[ "3" ; Char(8206) ]
)
)