本ページには広告が含まれています。
目次
- 1 順列
- 2 使い方
- 3 プログラム実行例
- 3.1 サービスをすべて取得し、そのサービスをユーザーが開始・停止できるかどうかをブール値で返す
- 3.2 フォルダ内のファイルを更新日時でソートする
- 3.3 テキストファイルの内容を行毎にソートして出力する
- 3.4 テキストファイルの内容を行毎にソートして書き換える
- 3.5 配列の中身を昇順で並び替える
- 3.6 配列の中身を降順で並び替える
- 3.7 多次元配列を一次元配列として昇順で並び替える
- 3.8 二次元配列を昇順で並び替える
- 3.9 シートを昇順に並び替える(Excel)*
- 3.10 シートを降順に並び替える(Excel)*
- 3.11 UWSC.INIのDefaultFontを変更する
- 3.12 都道府県別の人口・面積を人口降順で連動してソート
- 3.13 都道府県別の人口・面積を人口降順で連動してソート(多次元配列)
配列の中身をソートします。キー配列と連動させる配列は次元の違う同じ配列名を指定することできます。
- 構文
- 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)省略可
- 配列変数名、キー配列のソートと連動
- 戻り値
順列
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 ア ン
- 半角数字
- 半角英字(大文字)
- 半角英字(小文字)
- ひらがな
- カタカナ
- 漢字
- 全角数字
- 全角英字(大文字)
- 全角英字(小文字)
- 半角カタカナ
降順(QSRT_D)
値が大きい順に並べます。
ン ア z a Z A 9 0 亜 ン ア ん あ z a Z A 9 0
- 半角カタカナ
- 全角英字(小文字)
- 全角英字(大文字)
- 全角数字
- 漢字
- カタカナ
- ひらがな
- 半角英字(小文字)
- 半角英字(大文字)
- 半角数字
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のように)するか、自然順でソートします。
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文字ずつ大きさを比較し並び替え、1文字目が同じ場合2文字目の大きさを比較し並び替えるという手順でソートされます。
6 12 34 15 1 27 17
1文字目を比較し、小さい順に並び替える
12 15 1 17 27 34 6
2文字目を比較し、小さい順に並び替える。
1 12 15 17 27 34 6
このような手順のため数字は値の小さい順になりません。
一方自然順でソートする場合、12は1文字目が1だからとかではなく12と数字の塊で比較するので自然な並び方になります。
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
使い方
昇順
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,
降順
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昇順
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降順
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,
プログラム実行例
サービスをすべて取得し、そのサービスをユーザーが開始・停止できるかどうかをブール値で返す
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
// 【戻り値】
//
//////////////////////////////////////////////////
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
結果
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
使用関数
フォルダ内のファイルを更新日時でソートする
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を繰り返す回数
// 【戻り値】
//
//////////////////////////////////////////////////
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
使用関数
テキストファイルの内容を行毎にソートして出力する
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を繰り返す回数
// 【戻り値】
//
//////////////////////////////////////////////////
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
使用関数
テキストファイルの内容を行毎にソートして書き換える
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を繰り返す回数
// 【戻り値】
//
//////////////////////////////////////////////////
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
使用関数
配列の中身を昇順で並び替える
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
使用関数
配列の中身を降順で並び替える
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
使用関数
多次元配列を一次元配列として昇順で並び替える
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
使用関数
二次元配列を昇順で並び替える
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を繰り返す回数
// 【戻り値】
//
//////////////////////////////////////////////////
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
結果
2, 23
11, 6
11, 23
25, 38
25, 37
48, 25
49, 76
73, 23
使用関数
シートを昇順に並び替える(Excel)*
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)*
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を変更する
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を繰り返す回数
// 【戻り値】
//
//////////////////////////////////////////////////
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配列(面積)の関係性を保ったまま並び替える。
データは【都道府県】人口ランキング・面積ランキング・人口密度ランキングを参照。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を繰り返す回数
// 【戻り値】
//
//////////////////////////////////////////////////
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。
データは【都道府県】人口ランキング・面積ランキング・人口密度ランキングを参照。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)
- 指定されたプロパティのコレクションを並べ替えます。