Sort
提供: AutoHotkey Wiki
実行制御 | GUI表示 | 演算・変数 | メモリ・DLL操作 | 文字列操作 |
キーボード | マウス | シェル | ウィンドウ | ウィンドウグループ
ステータスバー | コントロール | サウンド | ファイル | INIファイル |
レジストリ | 環境変数 | AutoHotkey | その他 | 設定関係 | オブジェクト
Sort[編集]
変数の内容を特定の順番に並び替える。文字列としての処理のほかに、数値としての処理も可能。
Sort, VarName [, Options]
Parameters[編集]
引数名 | 説明 |
---|---|
VarName | 対象となるデータを格納した変数名。この変数の内容が並び替えられ、この変数に格納される。 |
Options | 後述するオプションを半角スペース区切りで列挙。 |
Options[編集]
C | 文字列として比較する場合に、大文字小文字を区別する。 |
CL | 現在のユーザーのロケール設定に沿って大文字小文字の違いを無視する。 日本語環境の場合、全角のアルファベットなども対象となる。 |
Dx | x に要素の区切り文字を指定する。省略時は改行コードLF(`n )。
|
F FunctionName | 指定した関数を使って比較を行う。 FunctionNameに比較を行う関数の名前を指定する。 関数は、2つもしくは3つの引数を受け取り、第1引数>第2引数なら正の値を、第1引数=第2引数なら0を、第1引数<第2引数なら負の値を返す。 関数が第3引数を受け取る場合、第1引数の文字列と第2引数の文字列の出現位置の差が与えられる。 D Z 以外のオプションは無視される。(ただし、 U オプションによる重複判定では、N、C、CLオプションに従った比較が行われる)関数が0を返した項目同士の並び順は不定である。元の文字列内での並び順と同じ順番にするためには、第1引数と第2引数が等しい場合に第3引数の値の符号を逆にして返すようにすればいい。 |
N | 各要素を数値として比較する。 16進数値や小数値も数値として扱われる。 先頭に数値として扱える部分があれば、その文字列は数値として扱われる。 数値で始まらない文字列は、 0 として扱われる。
|
Pn | 最初の数文字を飛ばして、n 番目の文字以降から比較に使用する。 省略時は、1文字目から比較される。 要素の長さがここで指定した文字数よりも小さい場合、その要素は空とみなされる。 Nオプションとともに使用された場合、n 文字目以降の数値として扱える部分で比較される。 |
R | 降順で並び替える。(大きい順) |
Random | 並び順をシャッフルする。D Z 以外のオプションは無視される。(ただし、 オプションによる重複判定では、N、C、CLオプションに従った比較が行われる) |
U | ソート結果から重複を取り除く。 ErrorLevelに削除された項目数が格納される。 Nオプションが指定された場合、 |
Z | 文字列の最後に区切り文字があったとき、その後に空要素が存在するものとみなす。 たとえば、 aaa`nbbbb`nccccc`n という文字列を並び替えるとき、通常は3つの要素があるとみなされるが、このオプションを指定すると4要素とみなされる。
|
\ | 一番最後の \ 以降の文字列で比較される。ファイルのフルパスのファイル名部分だけで比較したいときに使用する。 \ を含まない要素は、要素全体で比較される。このオプションを使用した場合、NオプションとPオプションは無視される。 |
Remarks[編集]
区切り文字によっては意図しない結果となるる可能性がある。 (日本語を扱う上での不具合を参照。)
日本語を含む文字列をソートする場合なるべく改行(`n
)を区切り文字として使うようにするのが望ましい。
AHKL ユニコード版ではどの文字を指定しても問題ない。
VarNameが Clipboard
で、クリップボードの内容がExplorerなどでコピーしたファイル群だった場合、Sort実行後のクリップボードの内容はファイル名を改行区切りで列挙した文字列になってしまう。
VarNameに指定したものが環境変数だった場合、新たに同じ名前のスクリプト側の変数が作成され、そこに結果が格納される。
その後VarNameへのアクセスはスクリプト側の変数へのアクセスになってしまう。
下記の例のようにすれば、結果を環境変数に移して、アクセス先を環境変数に戻すことが出来る。
VarSort, MyEnvVar
EnvSet, MyEnvVar, %MyEnvVar%
MyEnvVar = ;スクリプト側の変数を空にすると、環境変数のほうが優先されるようになる
Related[編集]
StringSplit, parsing loop, Clipboard
Example(s)[編集]
MyVar = 5,3,7,9,1,13,999,-4 Sort MyVar, N D,; Sort numerically, use comma as delimiter.
MsgBox %MyVar%; The result is -4,1,3,5,7,9,13,999
; This example makes Win+C a hotkey to copy files from an open
; Explorer window and put their sorted filenames onto the clipboard:
#c:: Clipboard =; Must be blank for detection to work.
Send ^c ClipWait 2 If ErrorLevel <> 0 Return Sort Clipboard MsgBox Ready to be pasted:`n%Clipboard% Return
; The following examples demonstrate custom sorting via a callback function.
MyVar = def`nabc`nmno`nFGH`nco-op`ncoop`ncop`ncon`n Sort, MyVar, F StringSort StringSort(a1, a2) { Return a1 > a2 ? 1 : a1 < a2 ? -1 : 0 } MyVar = 5,3,7,9,1,13,999,-4 Sort, MyVar, F IntegerSort D, IntegerSort(a1, a2) { Return a1 - a2; This method works only if the result never overflows a signed 64-bit integer.
} MyVar = 1,2,3,4 Sort, MyVar, F ReverseDirection D,; Reverses the list so that it contains 4,3,2,1
ReverseDirection(a1, a2, offset) { Return offset; Offset is positive if a2 came after a1 in the original list; negative otherwise.
}