SPLIT

タグ:

SPlIT関数は、文字列を指定した区切文字列で区切り配列を返す関数です。

配列を結合し文字列にするには、JOIN関数を使います。

構文
  1. safearray = SPLIT( 文字列, [区切文字列, 空文字処理フラグ, 数値処理フラグ] )
引数
文字列
区切り文字列を含んだ文字列
区切文字列
区切る為の文字列(省略時はスペース)
空文字処理フラグ
FALSE
空文字も有効(デフォルト)
TRUE
空文字は無効として処理しない
数値処理フラグ
FALSE
数値以外も有効 (デフォルト)
TRUE
数値型にて格納、数値以外は無効として空文字に変更する
戻り値
作成された一次元配列(SAFEARRAY型) 

プログラム実行例

無線LANのインターフェイス情報を取得

HASHTBL LAN

str = SPLIT(DOSCMD("netsh wlan show interface"), "<#CR>")

FOR n = 0 TO UBound(str)
	IFB POS(":", str[n]) THEN
		arr = SPLIT(str[n], ":")
		LAN[TRIM(arr[0])] = TRIM(arr[1])
	ENDIF
NEXT

DIM items[] = "名前", "説明", "GUID", "物理アドレス", "状態", + _
				"SSID", "BSSID", "ネットワークの種類", "無線の種類", "認証", + _
				"暗号", "接続モード", "チャネル", "受信速度 (Mbps)", "送信速度 (Mbps)", + _
				"シグナル", "プロファイル", "ホストされたネットワークの状態"

FOR item IN items
	PRINT item + ":" + LAN[item]
NEXT
  1. HASHTBL
  2. SPLIT
  3. DOSCMD
  4. UBound
  5. POS
  6. TRIM
結果
名前:ワイヤレス ネットワーク接続
説明:Intel(R) WiFi Link 1000 BGN
GUID:***
物理アドレス:74
状態:接続されました
SSID:***
BSSID:18
ネットワークの種類:インフラストラクチャ
無線の種類:802.11n
認証:WPA2-パーソナル
暗号:CCMP
接続モード:自動接続
チャネル:10
受信速度 (Mbps):72
送信速度 (Mbps):72
シグナル:80%
プロファイル:***
ホストされたネットワークの状態:利用不可

ユーザー名を取得

HASHTBL ENV

DIM str = SPLIT(DOSCMD("SET"), "<#CR>")

FOR n = 0 TO UBound(str)
	IFB POS("=", str[n]) THEN
		arr = SPLIT(str[n], "=")
		ENV[TRIM(arr[0])] = TRIM(arr[1])
	ENDIF
NEXT

PRINT ENV["USERNAME"]
  1. SPLIT
  2. DOSCMD
  3. UBound
  4. POS
  5. SPLIT
  6. TRIM
解説
  1. 1行目
    HASHTBL ENV
    連想配列ENVを宣言します。環境を表すEnvironmentの略です。
  2. 3行目
    DIM str = SPLIT(DOSCMD("SET"), "<#CR>")
    コマンドプロンプトでSETコマンドを実行し環境変数を取得します。その結果を改行毎にstr配列に格納します。str[0]=1行目、str[1]=2行目、str[n]=n+1行目、…という風に格納されます。
  3. 5行目
    FOR n = 0 TO UBound(str)
    変数nが0からstr配列の要素数分処理を繰り返します。str配列の要素数はSETコマンドの出力結果の行数-1となります。
  4. 6-9行目
    	IFB POS("=", str[n]) THEN
    		arr = SPLIT(str[n], "=")
    		ENV[TRIM(arr[0])] = TRIM(arr[1])
    	ENDIF
    もしstr[n]に"="が含まれていたら、"="を区切り文字列としてarr配列に格納します。arr[0]にstr[n]の"="より前の文字列、arr[1]にstr[n]の"="より後の文字列が格納されます。その後、arr[0]をキー、arr[1]を値として連想配列ENVに格納します。簡単に説明すると、str[n]の"="より前の文字列をキー、"="より後を値として連想配列を作成しています。
  5. 12行目
    PRINT ENV["USERNAME"]
    ENV["USERNAME"]の値を出力します。

二次方程式を解く

DIM frac[2]

DIM coeff = SPLIT(INPUT("係数を入力してください。「ax^2+bx+c=0」の「a,b,c」を入力。"), ",")

DIM a = coeff[0]
DIM b = coeff[1]
DIM c = coeff[2]

// 判別式
DIM D = EVAL("POWER(b, 2) - 4 * a * c")

DIM ans[-1]
DIM digit = -3

SELECT TRUE
	CASE D > 0
		IFB b = 0 THEN
			DIM root = simplifySqrt(D)
			frac[0] = root[0]
			frac[1] = EVAL("2 * a")
			num = GCD(frac)
			IFB frac[1] = ABS(num) THEN
				res = frac[0] / ABS(num)
			ELSE
				res = frac[0] + "/" + frac[1]
			ENDIF
			arrayPush(ans, (IIF(frac[0] / num <> 1, frac[0] / num, "") + IIF(root[1] <> 1, "√(" + root[1] + ")", "")))
			arrayPush(ans, (IIF(frac[0] / num <> 1, -frac[0] / num, "") + IIF(root[1] <> 1, "√(" + root[1] + ")", "")))
		ELSE
			// 約分する
			frac[0] = EVAL("-b")
			frac[1] = EVAL("2 * a")
			num = GCD(frac)
			IFB frac[1] = ABS(num) THEN
				res = frac[0] / ABS(num)
			ELSE
				res = frac[0] + "/" + frac[1]
			ENDIF
			// ルートの中から整数を外に出す
			root = simplifySqrt(D)
			frac[0] = root[0]
			num = GCD(frac)
			IFB frac[1] = num THEN
				arrayPush(ans, res + "+" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")"))
				arrayPush(ans, res + "-" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")"))
			ELSE
				arrayPush(ans, res + "+(" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + "))/" + (frac[1] / num)))
				arrayPush(ans, res + "-(" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + "))/" + (frac[1] / num)))
			ENDIF
		ENDIF
	CASE D = 0
		arrayPush(ans, ROUND(EVAL("-b/(2*a)"), digit))
	CASE D < 0
		IFB b = 0 THEN
			root = simplifySqrt(D)
			frac[0] = root[0]
			frac[1] = EVAL("2 * a")
			num = GCD(frac)
			IFB frac[1] = ABS(num) THEN
				res = frac[0] / ABS(num)
			ELSE
				res = frac[0] + "/" + frac[1]
			ENDIF
			arrayPush(ans, (IIF(frac[0] / num <> 1, frac[0] / num, "") + IIF(root[1] <> 1, "√(" + root[1] + ")", "")))
			arrayPush(ans, (IIF(frac[0] / num <> 1, -frac[0] / num, "") + IIF(root[1] <> 1, "√(" + root[1] + ")", "")))
		ELSE
			frac[0] = EVAL("-b")
			frac[1] = EVAL("2 * a")
			num = GCD(frac)
			IFB frac[1] = ABS(num) THEN
				res = frac[0] / ABS(num)
			ELSE
				res = IIF(frac[0] * frac[1] < 0, "-", "") + ABS(frac[0] / num) + "/" + ABS(frac[1] / num)
			ENDIF
			// ルートの中から整数を外に出す
			root = simplifySqrt(ABS(D))
			frac[0] = root[0]
			num = GCD(frac)
			IFB frac[1] = num THEN
				arrayPush(ans, res + "+" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")i"))
				arrayPush(ans, res + "-" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")i"))
			ELSE
				arrayPush(ans, res + "+(" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")i)/" + (frac[1] / num)))
				arrayPush(ans, res + "-(" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")i)/" + (frac[1] / num)))
			ENDIF
		ENDIF
SELEND

PRINT REPLACE(IIF(a <> 1, a, "") +"x^2+" + b + "x+" + c, "+-", "-")
PRINT "-----"

FOR item IN ans
	PRINT item
NEXT

//////////////////////////////////////////////////
// 【引数】
//   num : ルートの中
// 【戻値】
//   整数を外に出す
//////////////////////////////////////////////////
FUNCTION simplifySqrt(num)
	HASHTBL root
	
	DIM arr = primeFactorization(num)
	DIM a = 1, b = 1
	
	FOR item IN arr
		root[item] = root[item] + 1
	NEXT
	
	FOR n = 0 TO LENGTH(root) - 1
		IF INT(root[n, HASH_VAL] /  2) <> 0 THEN a = a * POWER(root[n, HASH_KEY], INT(root[n, HASH_VAL] /  2))
		IF (root[n, HASH_KEY] * (root[n, HASH_VAL] MOD 2)) <> 0 THEN b = b * (root[n, HASH_KEY] * (root[n, HASH_VAL] MOD 2))
	NEXT
	
	DIM res[1] = a, b
	
	RESULT = SLICE(res)
FEND
  1. SPLIT
  2. INPUT
  3. EVAL
  4. GCD
  5. ABS
  6. arrayPush
  7. IIF
  8. ROUND
  9. REPLACE
結果
4x^2+5x+3
-----
-5/8+(√(23)i)/8
-5/8-(√(23)i)/8

指定されたサービスを開始および停止できるかどうかを返す

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM arr = SPLIT(DOSCMD("sc query state=all | findstr /i service_name"), "<#CR>")

arr = strReplace("SERVICE_NAME: ", "", arr)

FOR n = 0 TO UBound(arr)
	PRINT arr[n] + "<#TAB>" + Shell.CanStartStopService(arr[n])
NEXT
  1. CREATEOLEOBJ
  2. SPLIT
  3. strReplace
  4. UBound
  5. Shell.CanStartStopService
結果
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
BDESVC False
BFE False
BITS False
BrokerInfrastructure False
BTAGService False
BthAvctpSvc False
bthserv False
camsvc False
CDPSvc False
CertPropSvc False
CLHNService False
ClipSVC False
COMSysApp False
CoreMessagingRegistrar False
cphs 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
defragsvc False
DeviceAssociationService False
DeviceInstall 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
DsmSvc False
DsSvc False
DusmSvc False
Eaphost False
EFS False
embeddedmode False
EntAppSvc False
EventLog False
EventSystem False
Everything False
Fax False
fdPHost False
FDResPub False
fhsvc 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
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
ose64 False
osppsvc False
p2pimsvc False
p2psvc False
PBExtractService False
PcaSvc False
perceptionsimulation False
PerfHost False
PhoneSvc False
pla False
PlugPlay False
PNRPAutoReg False
PNRPsvc False
PolicyAgent False
Power False
PrintNotify 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
TeamViewer False
TermService False
Themes False
TieringEngineService False
TimeBrokerSvc False
TMachInfo False
TODDSrv False
TokenBroker False
TosCoSrv False
TOSHIBA eco Utility Service False
TOSHIBA HDD SSD Alert Service False
TosRzTfSvc False
TPCHKarteSVC False
TPCHSrv False
TrkWks False
TroubleshootingSvc False
TrustedInstaller False
tzautoupdate False
UmRdpService False
UNS False
upnphost 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
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
wscsvc False
WSearch False
wuauserv False
WwanSvc False
XblAuthManager False
XblGameSave False
XboxGipSvc False
XboxNetApiSvc False
AarSvc_64da0 False
BcastDVRUserService_64da0 False
BluetoothUserService_64da0 False
CaptureService_64da0 False
cbdhsvc_64da0 False
CDPUserSvc_64da0 False
ConsentUxUserSvc_64da0 False
CredentialEnrollmentManagerUserSvc_64da0 False
DeviceAssociationBrokerSvc_64da0 False
DevicePickerUserSvc_64da0 False
DevicesFlowUserSvc_64da0 False
MessagingService_64da0 False
OneSyncSvc_64da0 False
PimIndexMaintenanceSvc_64da0 False
PrintWorkflowUserSvc_64da0 False
UnistoreSvc_64da0 False
UserDataSvc_64da0 False
WpnUserService_64da0 False

Yahoo!天気・災害情報より直近に発生した地震情報を取得しその場所をGoogleマップで表示

DIM IE = IEBoot()
IE.Navigate("http://typhoon.yahoo.co.jp/weather/earthquake/")
BusyWait(IE)

DIM ID = GETID("地震情報")
CTRLWIN(ID, MAX)

DIM array[-1][-1]
DIM element = IE.document.getElementById("eqinfdtl")
DIM elements = element.getElementsByTagName("table")
element = elements.Item(0)

getTableData(element, array)

HASHTBL tbl

FOR r = 0 TO UBound(array)
	tbl[TRIM(array[r][0])] = array[r][1]
NEXT

DIM way[1]

IF POS("北緯", tbl["緯度/経度"]) THEN way[0] = "N"
IF POS("東経", tbl["緯度/経度"]) THEN way[1] = "E"
IF POS("西経", tbl["緯度/経度"]) THEN way[1] = "W"
IF POS("南緯", tbl["緯度/経度"]) THEN way[0] = "S"

tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "度", "")
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "北緯", "")
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "東経", "")
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "西経", "-")
tbl["緯度/経度"] = REPLACE(tbl["緯度/経度"], "南緯", "-")

DIM coordinate = SPLIT(TRIM(tbl["緯度/経度"]), "/")
DIM z = 7
DIM url = "https://www.google.co.jp/maps/place/" + degToDMS(coordinate[0]) + way[0] + "," + degToDMS(coordinate[1]) + way[1] + "/@" + coordinate[0] + "," + coordinate[1] + "," + z + "z/"
url = REPLACE(url, "°", "%C2%B0")
url = REPLACE(url, "<#DBL>", "")

IE.Navigate(url)
BusyWait(IE)
  1. IEBoot
  2. IE.Navigate
  3. BusyWait
  4. GETID
  5. CTRLWIN
  6. document.getElementById
  7. Element.getElementsByTagName
  8. Elements.Item
  9. getTableData
  10. UBound
  11. TRIM
  12. POS
  13. REPLACE
  14. SPLIT
  15. degToDMS

Was this post helpful?

関連記事

arraySearch
配列の中から指定した要素が見つかった場合、その要素がある最初のインデックスを返します。
heapSort
引数に指定された配列をヒープソートで並び替えます。
quickSort
問題を小さな部分問題に分割していく分割統治法を利用した手法で、データから適当に基準値を決めこれより大きいグループと小さいグループに分けるという手順を、分けた小さなグループに対しても再帰的に繰り返していきます。
arrayReverse
引数に指定した配列を逆順にして返します。
oddEvenSort
奇偶転置ソートは、ソートのアルゴリズムの一つで、バブルソートを改良したもの。バブルソートではスキャンを一方向に順次行うのに対し、奇偶転置ソートでは組ごとに行います。
FOR-IN-NEXT
配列やコレクションなどのグループの各要素に対して繰り返し処理を行います。
shearSort
シェアソートはソートアルゴリズムの一つで、データを長方形に並べた上で各行・各列ごとにソートを行ないます。
bogoSort
要素をランダムに並べ替えることで偶発的な一致を試みる整列アルゴリズムです。
CALCARRAY
配列の合計値・最小値・最大値・平均値を求めます。
UBound
配列の最大インデックスを返します。
GETALLWIN
全ウィンドウのIDを取得します。
divisors
引数に指定した数値の約数をリストを配列で返します。
JOIN
引数に指定した配列を結合し文字列を返します。
POPUPMENU
ポップアップメニューを表示し、引数に指定した配列の中から選択された項目の要素番号を取得します。選択された項目を取得したい場合は、POPUPMENUの戻値を引数に指定した配列の要素番号として指定します。
QSORT
QSORT関数は、配列の中身をソートする関数です。戻値はありません。昇順・降順・UNICODE文字比較 昇順・UNICODE文字比較 降順・自然順ソート 昇順・自然順ソート 降順のいずれかを指定することができます。
RESIZE
配列のサイズを変更します。第二引数を省略した場合はサイズを取得します。
連想配列
連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の変わりに名前をつけることでわかりやすく管理することができます。
SETCLEAR
配列のすべての要素を任意の値で埋めます。
SHIFTARRAY
配列を指定した値だけシフトします。プラス値で後方、マイナス値で前方にシフトします。
SLICE
SLICE関数は、配列の中を指定範囲の配列で返す関数です。第一引数に配列を指定し、第二引数に開始位置、第三引数に終了位置を指定します。第二・第三引数は省略可能で、省略した場合は配列全体を返します。戻値はsafearray型です。
inArray
bubbleSort
引数に指定した配列をバブルソートで並び替えます。
shakerSort
シェーカーソートは、ソートのアルゴリズムの一つです。バブルソートを改良したもの。双方向バブルソート、改良交換法とも言われます。バブルソートではスキャンを一方向にしか行わないのに対し、シェーカーソートでは交互に二方向に行います。
combSort
コムソートではソートの初期段階では離れた要素を比較交換します。そして徐々に2つの要素間の距離を縮めて、最後に直接隣接している要素どうしの比較交換を行います。
gnomeSort
ノームソートはソートアルゴリズムの一つです。挿入ソートに似ているが、要素の移動は挿入ではなくバブルソートのような一連の交換で行います。
selectionSort
選択ソートは、ソートのアルゴリズムの一つ。配列された要素から、最大値やまたは最小値を探索し配列最後の要素と入れ替えを行うことでソートします。
insertionSort
挿入ソートは、ソートのアルゴリズムの一つ。整列してある配列に追加要素を適切な場所に挿入します。
shellSort
シェルソートは挿入ソートが改良された整列アルゴリズムです。リストにおいてあらかじめ離れている要素を交換しておき、最終的に挿入ソートを実行します。
mergeSort
マージソートは整列されていないリストを2つのリストに分割して、それぞれを整列させた後、それらをマージして整列済みのひとつのリストを作ります。