QSORTクイックソート関数

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

配列の中身をソートします。キー配列と連動させる配列は次元の違う同じ配列名を指定することできます。

構文
  1. void = QSORT( var キー配列, 順列, var 配列, var 配列, ... )
引数
キー配列 (Array)必須
ソートされる配列変数名
順列 (#qsort = QSRT_A)省略可
QSRT_A(0)
昇順 (デフォルト)
QSRT_D(1)
降順
QSRT_UNICODEA(2)
UNICODE文字比較 昇順
QSRT_UNICODED(3)
UNICODE文字比較 降順
QSRT_NATURALA(4)
自然順ソート 昇順
QSRT_NATURALD(5)
自然順ソート 降順
配列 (Array)省略可
配列変数名、キー配列のソートと連動
戻り値

順列

UWSC
DIM array[] = "あ", "ん", "ア", "ン", "ア", "ン", "A", "Z", "A", "Z", "a", "z", "a", "z", "0", "9", "0", "9", "亜"
DIM sorts[] = QSRT_A, QSRT_D, QSRT_UNICODEA, QSRT_UNICODED, QSRT_NATURALA, QSRT_NATURALD

FOR sort IN sorts
	QSORT(array, sort)
	DIM str = ""
	FOR item IN array
		str = str + item + " "
	NEXT
	PRINT str
NEXT
結果
プレーンテキスト
0 9 A Z a z あ ん ア ン 亜 0 9 A Z a z ア ン 
ン ア z a Z A 9 0 亜 ン ア ん あ z a Z A 9 0 
0 0 9 9 a a A A z z Z Z ア ア あ ン ン ん 亜 
亜 ん ン ン あ ア ア Z Z z z A A a a 9 9 0 0 
0 0 9 9 A a A a z Z Z z ア ア あ ン ン ん 亜 
亜 ん ン ン あ ア ア Z z z Z A a A a 9 9 0 0 

昇順(QSRT_A)

値が小さい順に並べます。

プレーンテキスト
0 9 A Z a z あ ん ア ン 亜 0 9 A Z a z ア ン
  1. 半角数字
  2. 半角英字(大文字)
  3. 半角英字(小文字)
  4. ひらがな
  5. カタカナ
  6. 漢字
  7. 全角数字
  8. 全角英字(大文字)
  9. 全角英字(小文字)
  10. 半角カタカナ

降順(QSRT_D)

値が大きい順に並べます。

プレーンテキスト
ン ア z a Z A 9 0 亜 ン ア ん あ z a Z A 9 0
  1. 半角カタカナ
  2. 全角英字(小文字)
  3. 全角英字(大文字)
  4. 全角数字
  5. 漢字
  6. カタカナ
  7. ひらがな
  8. 半角英字(小文字)
  9. 半角英字(大文字)
  10. 半角数字

Unicode昇順(QSRT_UNICODEA)

Unicodeの文字コード昇順で並べます。

プレーンテキスト
0 0 9 9 a a A A z z Z Z ア ア あ ン ン ん 亜

数値ではなく数字(文字)として先頭から1文字ずつ比較され並び替えが行われるので、1,2,3,4,5,10,11,12の場合、1,10,11,12,2,3,4,5という並びになってしまいます。

数字を小さい順に並べるには、桁数に合わせてゼロ埋め(2桁の場合は01、3桁の場合は001のように)するか、自然順でソートします。

UWSC
DIM array[] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

QSORT(array, QSRT_UNICODEA)

FOR item IN array
	PRINT item
NEXT
結果
プレーンテキスト
0
1
10
11
12
2
3
4
5
6
7
8
9

Unicode降順(QSRT_UNICODED)

Unicodeの文字コード降順で並べます。

プレーンテキスト
亜 ん ン ン あ ア ア Z Z z z A A a a 9 9 0 0

自然順昇順(QSRT_NATURALA)

アルファベット順を基本とし、複数桁の数字を単一文字として昇順で並べます。

プレーンテキスト
0 0 9 9 A a A a z Z Z z ア ア あ ン ン ん 亜
  1. 数字(半角→全角)
  2. 英字(半角→全角)
  3. ひらがな・カタカナ
  4. 漢字

自然順でないソートする場合、先頭から1文字ずつ大きさを比較し並び替え、1文字目が同じ場合2文字目の大きさを比較し並び替えるという手順でソートされます。

UWSC
6 12 34 15 1 27 17

1文字目を比較し、小さい順に並び替える

UWSC
12 15 1 17 27 34 6

2文字目を比較し、小さい順に並び替える。

UWSC
1 12 15 17 27 34 6

このような手順のため数字は値の小さい順になりません。

一方自然順でソートする場合、12は1文字目が1だからとかではなく12と数字の塊で比較するので自然な並び方になります。

UWSC
DIM array[] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

QSORT(array, QSRT_NATURALA)

FOR item IN array
	PRINT item
NEXT
結果
プレーンテキスト
0
1
2
3
4
5
6
7
8
9
10
11
12

自然順降順(QSRT_NATURALD)

アルファベット順を基本とし、複数桁の数字を単一文字として降順で並べます。

プレーンテキスト
亜 ん ン ン あ ア ア Z z z Z A a A a 9 9 0 0

使い方

昇順

UWSC
DIM array[] = 19, 5, 68, 13, 6, 99, 70, 64, 39, 30 

QSORT(array, QSRT_A)

DIM str = ""
FOR item IN array
	str = str + item + ", "
NEXT
結果
プレーンテキスト
5, 6, 13, 19, 30, 39, 64, 68, 70, 99,

降順

UWSC
DIM array[] = 19, 5, 68, 13, 6, 99, 70, 64, 39, 30 

QSORT(array, QSRT_D)

DIM str = ""
FOR item IN array
	str = str + item + ", "
NEXT

PRINT str
結果
プレーンテキスト
99, 70, 68, 64, 39, 30, 19, 13, 6, 5,

Unicode昇順

UWSC
DIM array[] = 19, 5, 68, 13, 6, 99, 70, 64, 39, 30 

QSORT(array, QSRT_UNICODEA)

DIM str = ""
FOR item IN array
	str = str + item + ", "
NEXT

PRINT str
結果
プレーンテキスト
13, 19, 30, 39, 5, 6, 64, 68, 70, 99,

Unicode降順

UWSC
DIM array[] = 19, 5, 68, 13, 6, 99, 70, 64, 39, 30 

QSORT(array, QSRT_UNICODED)

DIM str = ""
FOR item IN array
	str = str + item + ", "
NEXT

PRINT str
結果
プレーンテキスト
99, 70, 68, 64, 6, 5, 39, 30, 19, 13,

プログラム実行例

サービスをすべて取得し、そのサービスをユーザーが開始・停止できるかどうかをブール値で返す

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM str = DOSCMD("sc query state=all | findstr /B <#DBL>SERVICE_NAME:<#DBL>")
DIM Matches = reExecute(str, "SERVICE_NAME: (.*?)\r\n")
DIM services[Matches.Count]

FOR n = 0 TO Matches.Count - 1
	DIM service = Matches.Item(n).SubMatches(0)
	services[n] = service + ":" + Shell.CanStartStopService(service)
NEXT

QSORT(services, QSRT_UNICODEA)

FOR service IN services
	PRINT service
NEXT

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   正規表現で検索した結果をMatchesコレクションとして返します。 
//////////////////////////////////////////////////
FUNCTION reExecute(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Execute(str)
FEND
結果
CSV
AarSvc_6b8fd:                               False
AdobeARMservice:                            False
AJRouter:                                   False
ALG:                                        False
ALUpdateService:                            False
AppHostSvc:                                 False
AppIDSvc:                                   False
Appinfo:                                    False
AppReadiness:                               False
AppXSvc:                                    False
aspnet_state:                               False
AudioEndpointBuilder:                       False
Audiosrv:                                   False
autotimesvc:                                False
AxInstSV:                                   False
BcastDVRUserService_6b8fd:                  False
BDESVC:                                     False
BFE:                                        False
BITS:                                       False
BluetoothUserService_6b8fd:                 False
Bonjour Service:                            False
BootRacerServ:                              False
BrokerInfrastructure:                       False
BTAGService:                                False
BthAvctpSvc:                                False
bthserv:                                    False
camsvc:                                     False
CaptureService_6b8fd:                       False
cbdhsvc_6b8fd:                              False
CDPSvc:                                     False
CDPUserSvc_6b8fd:                           False
CertPropSvc:                                False
chromoting:                                 False
CLHNService:                                False
ClipSVC:                                    False
COMSysApp:                                  False
ConsentUxUserSvc_6b8fd:                     False
CoreMessagingRegistrar:                     False
cphs:                                       False
CredentialEnrollmentManagerUserSvc_6b8fd:   False
CryptSvc:                                   False
CypherGuard cguard Service 32bit Edition:   False
CypherGuard cguard Service 64bit Edition:   False
CypherGuard Info Service:                   False
dbupdate:                                   False
dbupdatem:                                  False
DbxSvc:                                     False
DcomLaunch:                                 False
dcsvc:                                      False
defragsvc:                                  False
DeviceAssociationBrokerSvc_6b8fd:           False
DeviceAssociationService:                   False
DeviceInstall:                              False
DevicePickerUserSvc_6b8fd:                  False
DevicesFlowUserSvc_6b8fd:                   False
DevQueryBroker:                             False
Dhcp:                                       False
diagnosticshub.standardcollector.service:   False
diagsvc:                                    False
DiagTrack:                                  False
DispBrokerDesktopSvc:                       False
DisplayEnhancementService:                  False
DmEnrollmentSvc:                            False
dmwappushservice:                           False
Dnscache:                                   False
DoSvc:                                      False
dot3svc:                                    False
DPS:                                        False
DSDFunctionKeyCtlService:                   False
DSDTabletControlService:                    False
DSDWirelessLEDCtlService:                   False
DsmSvc:                                     False
DsSvc:                                      False
DusmSvc:                                    False
dynabookSettingService:                     False
Eaphost:                                    False
edgeupdate:                                 False
edgeupdatem:                                False
EFS:                                        False
embeddedmode:                               False
EntAppSvc:                                  False
EventLog:                                   False
EventSystem:                                False
Everything:                                 False
Fax:                                        False
fdPHost:                                    False
FDResPub:                                   False
fhsvc:                                      False
FolderSize:                                 False
FontCache:                                  False
FontCache3.0.0.0:                           False
FrameServer:                                False
Freemake Improver:                          False
FreemakeVideoCapture:                       False
GoogleChromeElevationService:               False
GoogleIMEJaCacheService:                    False
gpsvc:                                      False
GraphicsPerfSvc:                            False
gupdate:                                    False
gupdatem:                                   False
hidserv:                                    False
HvHost:                                     False
icssvc:                                     False
IDriverT:                                   False
IKEEXT:                                     False
ImeDictUpdateService:                       False
InstallService:                             False
iphlpsvc:                                   False
IpxlatCfgSvc:                               False
KeyIso:                                     False
KtmRm:                                      False
LanmanServer:                               False
LanmanWorkstation:                          False
lfsvc:                                      False
LicenseManager:                             False
LLHDClient:                                 False
LLHDCloader:                                False
lltdsvc:                                    False
lmhosts:                                    False
LMS:                                        False
LSM:                                        False
LxpSvc:                                     False
MapsBroker:                                 False
McpManagementService:                       False
MessagingService_6b8fd:                     False
MicrosoftEdgeElevationService:              False
MixedRealityOpenXRSvc:                      False
MozillaMaintenance:                         False
mpssvc:                                     False
MSDTC:                                      False
MSiSCSI:                                    False
msiserver:                                  False
MSMQ:                                       False
MSSQL$SQLEXPRESS:                           False
MSSQLServerADHelper100:                     False
NaturalAuthentication:                      False
NcaSvc:                                     False
NcbService:                                 False
NcdAutoSetup:                               False
Netlogon:                                   False
Netman:                                     False
NetMsmqActivator:                           False
NetPipeActivator:                           False
netprofm:                                   False
NetSetupSvc:                                False
NetTcpActivator:                            False
NetTcpPortSharing:                          False
NgcCtnrSvc:                                 False
NgcSvc:                                     False
NielsenUpdate:                              True
NlaSvc:                                     False
nsi:                                        False
nurago InstallUpdate:                       False
nurago NetworkMeter:                        False
nurago Reporting Service:                   False
OneSyncSvc_6b8fd:                           False
ose64:                                      False
osppsvc:                                    False
p2pimsvc:                                   False
p2psvc:                                     False
PcaSvc:                                     False
perceptionsimulation:                       False
PerfHost:                                   False
PhoneSvc:                                   False
PimIndexMaintenanceSvc_6b8fd:               False
pla:                                        False
PlugPlay:                                   False
PNRPAutoReg:                                False
PNRPsvc:                                    False
PolicyAgent:                                False
Power:                                      False
PrintNotify:                                False
PrintWorkflowUserSvc_6b8fd:                 False
ProfSvc:                                    False
PushToInstall:                              False
QWAVE:                                      False
RasAuto:                                    False
RasMan:                                     False
RemoteAccess:                               False
RemoteRegistry:                             False
RetailDemo:                                 False
RmSvc:                                      False
RpcEptMapper:                               False
RpcLocator:                                 False
RpcSs:                                      False
SamSs:                                      False
SCardSvr:                                   False
ScDeviceEnum:                               False
Schedule:                                   False
SCPolicySvc:                                False
SDRSVC:                                     False
seclogon:                                   False
SecurityHealthService:                      False
SEMgrSvc:                                   False
SENS:                                       False
SensorDataService:                          False
SensorService:                              False
SensrSvc:                                   False
SessionEnv:                                 False
SgrmBroker:                                 False
SharedAccess:                               False
SharedRealitySvc:                           False
ShellHWDetection:                           False
shpamsvc:                                   False
smphost:                                    False
SmsRouter:                                  False
SNMPTRAP:                                   False
spectrum:                                   False
Spooler:                                    False
sppsvc:                                     False
SQLAgent$SQLEXPRESS:                        False
SQLBrowser:                                 False
SQLWriter:                                  False
SSDPSRV:                                    False
ssh-agent:                                  False
SstpSvc:                                    False
StateRepository:                            False
stisvc:                                     False
StorSvc:                                    False
svsvc:                                      False
swprv:                                      False
SynTPEnhService:                            False
SysMain:                                    False
SystemEventsBroker:                         False
SystemExplorerHelpService:                  False
TabletInputService:                         False
TapiSrv:                                    False
TermService:                                False
Themes:                                     False
TieringEngineService:                       False
TimeBrokerSvc:                              False
TMachInfo:                                  False
TODDSrv:                                    False
TokenBroker:                                False
TosCoSrv:                                   False
TOSHIBA HDD SSD Alert Service:              False
TPCHSrv:                                    False
TrkWks:                                     False
TroubleshootingSvc:                         False
TrustedInstaller:                           False
tzautoupdate:                               False
UdkUserSvc_6b8fd:                           False
uhssvc:                                     False
UmRdpService:                               False
UnistoreSvc_6b8fd:                          False
UNS:                                        False
upnphost:                                   False
UserDataSvc_6b8fd:                          False
UserManager:                                False
UsoSvc:                                     False
VacSvc:                                     False
VaultSvc:                                   False
vds:                                        False
vmicguestinterface:                         False
vmicheartbeat:                              False
vmickvpexchange:                            False
vmicrdv:                                    False
vmicshutdown:                               False
vmictimesync:                               False
vmicvmsession:                              False
vmicvss:                                    False
vncserver:                                  False
VSS:                                        False
VSStandardCollectorService150:              False
W32Time:                                    False
w3logsvc:                                   False
W3SVC:                                      False
WaaSMedicSvc:                               False
WalletService:                              False
WarpJITSvc:                                 False
WAS:                                        False
wbengine:                                   False
WbioSrvc:                                   False
Wcmsvc:                                     False
wcncsvc:                                    False
WdiServiceHost:                             False
WdiSystemHost:                              False
WdNisSvc:                                   False
WebClient:                                  False
Wecsvc:                                     False
WEPHOSTSVC:                                 False
wercplsupport:                              False
WerSvc:                                     False
WFDSConMgrSvc:                              False
WiaRpc:                                     False
WinDefend:                                  False
WinHttpAutoProxySvc:                        False
Winmgmt:                                    False
WinRM:                                      False
wisvc:                                      False
WlanSvc:                                    False
wlidsvc:                                    False
wlpasvc:                                    False
WManSvc:                                    False
wmiApSrv:                                   False
WMPNetworkSvc:                              False
workfolderssvc:                             False
WpcMonSvc:                                  False
WPDBusEnum:                                 False
WpnService:                                 False
WpnUserService_6b8fd:                       False
wscsvc:                                     False
WSearch:                                    False
wuauserv:                                   False
WwanSvc:                                    False
XblAuthManager:                             False
XblGameSave:                                False
XboxGipSvc:                                 False
XboxNetApiSvc:                              False
使用関数

フォルダ内のファイルを更新日時でソートする

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("C:\Program Files (x86)\UWSC")
DIM FolderItems = Folder.Items

HASHTBL iColumn

FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

DIM filename[-1]
DIM datetime[-1]

FOR i = 0 TO FolderItems.Count - 1
	DIM FolderItem = FolderItems.Item(i)
	IF FolderItem.isFolder THEN CONTINUE
	arrayPush(filename, Folder.GetDetailsOf(FolderItem,iColumn["名前"]))
	arrayPush(datetime, Folder.GetDetailsOf(FolderItem, iColumn["更新日時"]))
NEXT

QSORT(datetime, QSRT_NATURALA, filename)

FOR i = 0 TO UBound(filename)
	PRINT filename[i] + "<#TAB>" + datetime[i]
NEXT

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数) 
//   values : 追加する要素をvalue1から指定 
// 【戻り値】
//   処理後の配列の要素の数 
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i) <> EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
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
結果
プレーンテキスト
UDebug.chm	2014/05/11 1:58
RecIE.chm	2014/05/11 1:58
Uws2Exe.chm	2015/08/13 16:12
RecUws.dll	2016/03/25 4:57
UWSC.exe	2016/10/15 13:33
Uws2Exe.exe	2016/10/15 13:34
RecIE.exe	2016/10/15 13:35
UDebug.exe	2016/10/15 13:37
XRef.exe	2016/10/15 13:38
Readme.txt	2016/10/15 13:39
uwsc.chm	2016/10/15 13:41
unins000.exe	2018/06/27 12:48
unins000.dat	2018/06/27 12:49
使用関数

テキストファイルの内容を行毎にソートして出力する

UWSC
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ)
DIM array[-1]

FOR i = 1 TO FGET(FID, F_LINECOUNT)
	arrayPush(array, FGET(FiD, i))
NEXT

FCLOSE(FID)

QSORT(array, QSRT_A)

FOR i = 0 TO UBound(array)
	PRINT array[i]
NEXT

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数) 
//   values : 追加する要素をvalue1から指定 
// 【戻り値】
//   処理後の配列の要素の数 
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i) <> EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
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
使用関数

テキストファイルの内容を行毎にソートして書き換える

UWSC
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ OR F_WRITE)
DIM array[-1]

FOR i = 1 TO FGET(FID, F_LINECOUNT)
	arrayPush(array, FGET(FiD, i))
NEXT

QSORT(array, QSRT_A)

FPUT(FID, "", F_ALLTEXT)

FOR i = 0 TO UBound(array)
	FPUT(FID, array[i], i + 1)
NEXT

FCLOSE(FID)

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数) 
//   values : 追加する要素をvalue1から指定 
// 【戻り値】
//   処理後の配列の要素の数 
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i) <> EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
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
使用関数

配列の中身を昇順で並び替える

UWSC
DIM arr[] = 674, 8, 957, 254, 6014, 36, 378

QSORT(arr, QSRT_A)

FOR item IN arr
	PRINT item
NEXT
結果
プレーンテキスト
8
36
254
378
674
957
6014
使用関数

配列の中身を降順で並び替える

UWSC
DIM arr[] = 586, 36, 7528, 61, 872, 3695, 142

QSORT(arr, QSRT_D)

FOR item IN arr
	PRINT item
NEXT
結果
プレーンテキスト
7528
3695
872
586
142
61
36
使用関数

多次元配列を一次元配列として昇順で並び替える

UWSC
DIM arr[1][7]

arr[0][0] = 25;	arr[1][0] = 37;
arr[0][1] = 49;	arr[1][1] = 76;
arr[0][2] = 25;	arr[1][2] = 38;
arr[0][3] = 2;	arr[1][3] = 23;
arr[0][4] = 11;	arr[1][4] = 6;
arr[0][5] = 11;	arr[1][5] = 23;
arr[0][6] = 48;	arr[1][6] = 25;
arr[0][7] = 73;	arr[1][7] = 23;

QSORT(arr, 0)

FOR item IN arr
	PRINT item
NEXT
結果
プレーンテキスト
2
6
11
11
23
23
23
25
25
25
37
38
48
49
73
76
使用関数

二次元配列を昇順で並び替える

UWSC
DIM arr[1][7]

arr[0][0] = 25;	arr[1][0] = 37;
arr[0][1] = 49;	arr[1][1] = 76;
arr[0][2] = 25;	arr[1][2] = 38;
arr[0][3] = 2;	arr[1][3] = 23;
arr[0][4] = 11;	arr[1][4] = 6;
arr[0][5] = 11;	arr[1][5] = 23;
arr[0][6] = 48;	arr[1][6] = 25;
arr[0][7] = 73;	arr[1][7] = 23;

QSORT(arr[0], 0, arr[1])

FOR n = 0 TO UBound(arr[0])
	PRINT arr[0][n] + "," + arr[1][n]
NEXT

//////////////////////////////////////////////////
// 【引数】
//   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
結果
CSV
2,    23
11,   6
11,   23
25,   38
25,   37
48,   25
49,   76
73,   23
使用関数

シートを昇順に並び替える(Excel)*

UWSC
WITH Excel
	DIM cnt = .Sheets.Count
	DIM SheetsList[cnt]
	
	FOR i = 0 TO cnt - 1
		SheetsList[i] = .Sheets(i+1).Name
	NEXT
	
	QSORT(SheetsList, QSRT_A)
	
	FOR i = 0 TO cnt - 1
		.Sheets(SheetsList[i]).Move(, .Sheets(i+1))
	NEXT
ENDWITH
使用関数

シートを降順に並び替える(Excel)*

UWSC
WITH Excel
	DIM cnt = .Sheets.Count
	DIM SheetsList[cnt]
	
	FOR i = 0 TO cnt - 1
		SheetsList[i] = .Sheets(i+1).Name
	NEXT
	
	QSORT(SheetsList, QSRT_A)
	
	FOR i = 0 TO cnt - 1
		.Sheets(SheetsList[i]).Move(, .Sheets(i+1))
	NEXT
ENDWITH
使用関数

UWSC.INIのDefaultFontを変更する

UWSC
CONST ssfFONTS = 20

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfFONTS)
DIM FolderItems = Folder.Items
DIM array[-1]

FOR FolderItem IN FolderItems
	arrayPush(array, FolderItem.Name)
NEXT

QSORT(array, QSRT_UNICODEA)
SHIFTARRAY(array, 1)
array[0] = "(なし)"

DIM filename = "C:\Users\" + BETWEENSTR(DOSCMD("SET"), "USERNAME=", "<#CR>") + "\AppData\Roaming\UWSC\UWSC.INI"
DIM str = SPLIT(READINI("SET", "DefaultFont", filename), ",")[0]
DIM font = SLCTBOX(SLCT_CMB OR SLCT_STR, 0, "フォントを選択してください。(現在:" + str + ")", array)

IF font = "(なし)" THEN font = ""
IF font <> -1 THEN WRITEINI("SET", "DefaultFont", font + ",", filename)

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数) 
//   values : 追加する要素をvalue1から指定 
// 【戻り値】
//   処理後の配列の要素の数 
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i) <> EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   section : セクション 
//   key : キー(Delete関数は省略可) 
//   value : 値 
//   path : INIファイルのパス 
//   default : セクションとキーが存在しなかった場合に返す値 
// 【戻り値】
//   
//////////////////////////////////////////////////
MODULE INI
	DEF_DLL GetPrivateProfileStringW(wstring,wstring,wstring,var pwchar,dword,wstring):dword:kernel32
	DEF_DLL WritePrivateProfileStringW(wstring,wstring,wstring,wstring):bool:kernel32
	FUNCTION Read(section = NULL, key = NULL, path = NULL, default = EMPTY)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		DIM n = 1024
		DIM buffer = FORMAT(CHR(0), n)
		IFB GetPrivateProfileStringW(section, key, default, buffer, n, path) = 0 THEN
			RESULT = default
		ELSE
			RESULT = SLICE(SPLIT(buffer, CHR(0), TRUE))
			IF section <> NULL AND key <> NULL THEN RESULT = RESULT[0]
		ENDIF
	FEND
	FUNCTION Write(section, key, value, path = NULL)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		RESULT = WritePrivateProfileStringW(section, key, value, path)
	FEND
	PROCEDURE Delete(section, key = NULL, path = NULL)
		DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
		IFB path = NULL THEN
			path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
		ELSE
			path = FSO.GetAbsolutePathName(path)
		ENDIF
		PRINT WritePrivateProfileStringW(section, key, NULL, path)
	FEND
	FUNCTION escape(value)
		DIM esc = ";#=:"
		FOR i = 1 TO LENGTH(esc)
			DIM s = COPY(esc, i, 1)
			value = REPLACE(value, s, "\" + s)
		NEXT
		RESULT = value
	FEND
	FUNCTION unescape(value)
		DIM esc = ";#=:"
		FOR i = 1 TO LENGTH(esc)
			DIM s = COPY(esc, i, 1)
			value = REPLACE(value, "\" + s, s)
		NEXT
		RESULT = value
	FEND
ENDMODULE

//////////////////////////////////////////////////
// 【引数】
//   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
使用関数

都道府県別の人口・面積を人口降順で連動してソート

population配列(人口)を降順(大きい順)に、pref配列(都道府県)とarea配列(面積)の関係性を保ったまま並び替える。

データは【都道府県】人口ランキング・面積ランキング・人口密度ランキングを参照。
UWSC
DIM pref[] = "北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"
DIM population[] = "5228885", "1238730", "1211206", "2303487", "960113", "1068696", "1834198", "2868554", "1934016", "1940333", "7346836", "6287034", "14064696", "9240411", "2202358", "1035612", "1133294", "767433", "810427", "2049683", "1979781", "3635220", "7546192", "1771440", "1414248", "2579921", "8842523", "5469184", "1325437", "923033", "553847", "671602", "1889607", "2801388", "1342987", "719704", "951049", "1335694", "692065", "5138891", "812013", "1313103", "1739211", "1124597", "1070213", "1589206", "1468410"
DIM area[] = "78421.39", "9645.64", "15275.01", "7282.29", "11637.52", "9323.15", "13784.14", "6097.39", "6408.09", "6362.28", "3797.75", "5157.57", "2194.03", "2416.11", "12583.96", "4247.58", "4186.21", "4190.52", "4465.27", "13561.56", "10621.29", "7777.35", "5173.07", "5774.49", "4017.38", "4612.20", "1905.32", "8401.02", "3690.94", "4724.65", "3507.14", "6707.89", "7114.33", "8479.65", "6112.54", "4146.75", "1876.78", "5676.19", "7103.63", "4986.51", "2440.69", "4130.98", "7409.46", "6340.76", "7735.22", "9187.06", "2282.59"

QSORT(population, QSRT_NATURALD, pref, area)

PRINT "都道府県,人口,面積"

FOR i = 0 TO UBound(pref)
	PRINT pref[i] + "," + population[i] + "," + area[i]
NEXT

//////////////////////////////////////////////////
// 【引数】
//   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
結果
プレーンテキスト
都道府県,人口,面積
東京都,14064696,2194.03
神奈川県,9240411,2416.11
大阪府,8842523,1905.32
愛知県,7546192,5173.07
埼玉県,7346836,3797.75
千葉県,6287034,5157.57
兵庫県,5469184,8401.02
北海道,5228885,78421.39
福岡県,5138891,4986.51
静岡県,3635220,7777.35
茨城県,2868554,6097.39
広島県,2801388,8479.65
京都府,2579921,4612.20
宮城県,2303487,7282.29
新潟県,2202358,12583.96
長野県,2049683,13561.56
岐阜県,1979781,10621.29
群馬県,1940333,6362.28
栃木県,1934016,6408.09
岡山県,1889607,7114.33
福島県,1834198,13784.14
三重県,1771440,5774.49
熊本県,1739211,7409.46
鹿児島県,1589206,9187.06
沖縄県,1468410,2282.59
滋賀県,1414248,4017.38
山口県,1342987,6112.54
愛媛県,1335694,5676.19
奈良県,1325437,3690.94
長崎県,1313103,4130.98
青森県,1238730,9645.64
岩手県,1211206,15275.01
石川県,1133294,4186.21
大分県,1124597,6340.76
宮崎県,1070213,7735.22
山形県,1068696,9323.15
富山県,1035612,4247.58
秋田県,960113,11637.52
香川県,951049,1876.78
和歌山県,923033,4724.65
佐賀県,812013,2440.69
山梨県,810427,4465.27
福井県,767433,4190.52
徳島県,719704,4146.75
高知県,692065,7103.63
島根県,671602,6707.89
鳥取県,553847,3507.14
使用関数

都道府県別の人口・面積を人口降順で連動してソート(多次元配列)

array[0][i]は都道府県名、array[1][i]は人口で単位はarray[2][i]は面積で単位はkm2

データは【都道府県】人口ランキング・面積ランキング・人口密度ランキングを参照。
UWSC
DIM array[][46] = "北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県", + _
					"5228885", "1238730", "1211206", "2303487", "960113", "1068696", "1834198", "2868554", "1934016", "1940333", "7346836", "6287034", "14064696", "9240411", "2202358", "1035612", "1133294", "767433", "810427", "2049683", "1979781", "3635220", "7546192", "1771440", "1414248", "2579921", "8842523", "5469184", "1325437", "923033", "553847", "671602", "1889607", "2801388", "1342987", "719704", "951049", "1335694", "692065", "5138891", "812013", "1313103", "1739211", "1124597", "1070213", "1589206", "1468410", + _
					"78421.39", "9645.64", "15275.01", "7282.29", "11637.52", "9323.15", "13784.14", "6097.39", "6408.09", "6362.28", "3797.75", "5157.57", "2194.03", "2416.11", "12583.96", "4247.58", "4186.21", "4190.52", "4465.27", "13561.56", "10621.29", "7777.35", "5173.07", "5774.49", "4017.38", "4612.20", "1905.32", "8401.02", "3690.94", "4724.65", "3507.14", "6707.89", "7114.33", "8479.65", "6112.54", "4146.75", "1876.78", "5676.19", "7103.63", "4986.51", "2440.69", "4130.98", "7409.46", "6340.76", "7735.22", "9187.06", "2282.59"

QSORT(array[1], QSRT_NATURALD, array[0], array[2])

PRINT "都道府県,人口,面積"

FOR i = 0 TO 46
	DIM str = ""
	FOR j = 0 TO 2
		str = str + array[j][i] + ","
	NEXT
	PRINT str
NEXT
結果
プレーンテキスト
都道府県,人口,面積
東京都,14064696,2194.03,
神奈川県,9240411,2416.11,
大阪府,8842523,1905.32,
愛知県,7546192,5173.07,
埼玉県,7346836,3797.75,
千葉県,6287034,5157.57,
兵庫県,5469184,8401.02,
北海道,5228885,78421.39,
福岡県,5138891,4986.51,
静岡県,3635220,7777.35,
茨城県,2868554,6097.39,
広島県,2801388,8479.65,
京都府,2579921,4612.20,
宮城県,2303487,7282.29,
新潟県,2202358,12583.96,
長野県,2049683,13561.56,
岐阜県,1979781,10621.29,
群馬県,1940333,6362.28,
栃木県,1934016,6408.09,
岡山県,1889607,7114.33,
福島県,1834198,13784.14,
三重県,1771440,5774.49,
熊本県,1739211,7409.46,
鹿児島県,1589206,9187.06,
沖縄県,1468410,2282.59,
滋賀県,1414248,4017.38,
山口県,1342987,6112.54,
愛媛県,1335694,5676.19,
奈良県,1325437,3690.94,
長崎県,1313103,4130.98,
青森県,1238730,9645.64,
岩手県,1211206,15275.01,
石川県,1133294,4186.21,
大分県,1124597,6340.76,
宮崎県,1070213,7735.22,
山形県,1068696,9323.15,
富山県,1035612,4247.58,
秋田県,960113,11637.52,
香川県,951049,1876.78,
和歌山県,923033,4724.65,
佐賀県,812013,2440.69,
山梨県,810427,4465.27,
福井県,767433,4190.52,
徳島県,719704,4146.75,
高知県,692065,7103.63,
島根県,671602,6707.89,
鳥取県,553847,3507.14,
使用関数

関連記事

bubbleSort関数 (自作関数)
引数に指定された配列を バブルソート で並び替えます。
shakerSort関数 (自作関数)
引数に指定された配列を シェーカーソート で並び替えます。
small関数 (自作関数)
配列の中で小さい方から数えた順位の値を求めます。
gnomeSort関数 (自作関数)
引数に指定された配列を ノームソート で並び替えます。
insertionSort関数 (自作関数)
引数に指定された配列を 挿入ソート で並び替えます。
shellSort関数 (自作関数)
引数に指定された配列を シェルソート で並び替えます。
heapSort関数 (自作関数)
引数に指定された配列を ヒープソート で並び替えます。
quickSort関数 (自作関数)
引数に指定された配列を クイックソート で並び替えます。
shearSort関数 (自作関数)
引数に指定された配列を シェアソート で並び替えます。
Items.Sort メソッド (Outlook)
指定されたプロパティのコレクションを並べ替えます。