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

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
    (1) (3,7) (3) (5) (6) (8)
結果
名前:ワイヤレス ネットワーク接続
説明: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"]

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
    (3,7) (3) (5) (6) (7) (8)
解説
  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

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数) 
//   str : 追加する要素 
// 【戻値】
//   処理後の配列の中の要素の数 
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
	DIM res = RESIZE(arr, UBound(arr) + 1)
	arr[res] = str
	RESULT = res + 1
FEND

//////////////////////////////////////////////////
// 【引数】
//   arr : 最大公約数を求める数値を格納した配列 
// 【戻値】
//   最大公約数 
//////////////////////////////////////////////////
FUNCTION GCD(arr[])
	DIM c = LENGTH(arr)
	DIM rem = arr[c-1] MOD arr[c-2]
	IFB rem = 0 THEN
		IFB LENGTH(arr) = 2 THEN
			RESULT = arr[c-2]
			EXIT
		ENDIF
		RESIZE(arr, c-2)
		RESULT = GCD(arr)
		EXIT
	ENDIF
	arr[c-1] = arr[c-2]
	arr[c-2] = rem
	RESULT = GCD(arr)
FEND

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式 
//   truepart : 評価した式がTrueのときに返す値 
//   falsepart : 評価した式がFalseのときに返す値 
// 【戻値】
//   truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき 
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND

//////////////////////////////////////////////////
// 【引数】
//   num : 素因数分解する数値 
// 【戻値】
//   素因数分解した数値を格納した配列 
//////////////////////////////////////////////////
FUNCTION primeFactorization(num)
	DIM arr[-1]
	// 偶数なら2で割り続ける
	WHILE num MOD 2 = 0
		arrayPush(arr, 2)
		num = num / 2
	WEND
	FOR n = 3 TO num
		WHILE num MOD n = 0
			arrayPush(arr, n)
			num = num / n
		WEND
	NEXT
	RESULT = SLICE(arr)
FEND

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
    (3) (3) (10,20,31,32,52,57,67,68) (21,33,42,58,69,78) (22,23,34,35,59,60,70,71,73,76) (27,28,44,45,47,48,52,64,65,80,81,83,84) (27.28,44,45,47,48,64,65,73,80,81,83,84,89) (52) (89)
結果
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

//////////////////////////////////////////////////
// 【引数】
//   search : 探したい値 
//   replace : 見つかった search を置き換える値 
//   subject : 検索・置換の対象となる文字列あるいは配列 
// 【戻値】
//   置換後の文字列あるいは配列 
//////////////////////////////////////////////////
FUNCTION strReplace(search, replace, subject)
	SELECT VARTYPE(subject) AND $2000
		CASE $2000
			// 配列
			FOR n = 0 TO UBound(subject)
				subject[n] = REPLACE(subject[n], search, replace)
			NEXT
			RESULT = SLICE(subject)
		DEFAULT
			// 配列以外
			RESULT = REPLACE(subject, search, replace)
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
    (1) (2) (4) (6) (7)
結果
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)

//////////////////////////////////////////////////
// 【引数】
//   IE : IEオブジェクト 
// 【戻値】
//   
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
	SLEEP(0.500)
	DIM t = GETTIME()
	TRY
		REPEAT
			DIM tm = GETTIME() - t
			FUKIDASI("BusyWait:" + tm)
			SLEEP(0.010)
			IF tm >= 60 THEN BREAK
		UNTIL !IE.Busy AND IE.readyState = 4
	EXCEPT
		IE = getIEObj(-1)
		PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
		BusyWait(IE)
	ENDTRY
	FUKIDASI()
FEND

//////////////////////////////////////////////////
// 【引数】
//   deg : 角度(°) 
// 【戻値】
//   角度(deg°分'秒") 
//////////////////////////////////////////////////
FUNCTION degToDMS(deg)
	DIM degree = INT(deg)
	DIM minute = (deg - INT(deg)) * 60
	DIM second = ROUND(minute - INT(minute), -10) * 60
	RESULT = degree + "°" + INT(minute) + "'" + ROUND(second, -5) + "<#DBL>"
FEND

//////////////////////////////////////////////////
// 【引数】
//   文字列 or 数値 : 取得したいIEオブジェクトのタイトル・URLもしくは数値を指定 
//   完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得) 
// 【戻値】
//   Internet Explorerオブジェクト 
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
	DIM Shell = CREATEOLEOBJ("Shell.Application")
	SELECT CHKNUM(str)
		CASE TRUE
			DIM cnt = 0
			SELECT TRUE
				CASE str > 0
					FOR n = 0 TO Shell.Windows.Count - 1
						TRY
							IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
								cnt = cnt + 1
								IFB str = cnt THEN
									RESULT = Shell.Windows.Item(n)
									EXIT
								ENDIF
							ENDIF
						EXCEPT
						ENDTRY
					NEXT
				CASE str < 0
					FOR n = Shell.Windows.Count - 1 TO 0 STEP -1
						TRY
							IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
								cnt = cnt + 1
								IFB ABS(str) = cnt THEN
									RESULT = Shell.Windows.Item(n)
									EXIT
								ENDIF
							ENDIF
						EXCEPT
						ENDTRY
					NEXT
				CASE str = 0
					FOR n = 0 TO Shell.Windows.Count - 1
						TRY
							IF Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1
						EXCEPT
						ENDTRY
					NEXT
					RESULT = cnt
					EXIT
			SELEND
		CASE FALSE
			DIM t = GETTIME()
			REPEAT
				FOR n = 0 TO Shell.Windows.Count - 1
					TRY
						DIM targetObj = Shell.Windows.Item(n)
						IFB targetObj.Name = "Internet Explorer" THEN
							SELECT flg
								CASE TRUE
									IFB targetObj.document.title = str OR targetObj.LocationURL = str THEN
										RESULT = Shell.Windows.Item(n)
										EXIT
									ENDIF
								CASE FALSE
									IFB POS(str, targetObj.document.title) OR POS(str, targetObj.LocationURL) THEN
										RESULT = Shell.Windows.Item(n)
										EXIT
									ENDIF
							SELEND
						ENDIF
					EXCEPT
					ENDTRY
				NEXT
			UNTIL GETTIME() - t >= 5
	SELEND
	RESULT = ERR_VALUE
FEND

//////////////////////////////////////////////////
// 【引数】
//   table : tableエレメント 
//   arr : 取得したデータを格納する配列(参照引数) 
// 【戻値】
//   
//////////////////////////////////////////////////
PROCEDURE getTableData(table, Var arr[][])
	rowMax = table.rows.length - 1
	colMax = 0
	FOR row = 0 TO table.rows.length - 1
		IFB table.rows(row).cells.length - 1 > colMax THEN
			colMax = table.rows(row).cells.length - 1
		ENDIF
	NEXT
	DIM arr[rowMax][colMax]
	FOR row = 0 TO table.rows.length - 1
		FOR col = 0 TO table.rows(row).cells.length - 1
			n = 0
			WHILE arr[row][col + n] <> ""
				n = n + 1
			WEND
			arr[row][col + n] = table.rows(row).cells(col).innerText
			IFB table.rows(row).cells(col).rowSpan > 1 AND table.rows(row).cells(col).colSpan > 1 THEN
				rmax = table.rows(row).cells(col).rowSpan - 1
				cmax = table.rows(row).cells(col).colSpan - 1
				FOR r = 1 TO rmax
					FOR c = 1 TO cmax
						arr[row + r][col + c] = "←"
					NEXT
				NEXT
			ENDIF
			IFB table.rows(row).cells(col).rowSpan > 1 THEN
				n = table.rows(row).cells(col).rowSpan - 1
				WHILE n
					arr[row + n][col] = "↑"
					n = n - 1
				WEND
			ENDIF
			IFB table.rows(row).cells(col).colSpan > 1 THEN
				n = table.rows(row).cells(col).colSpan - 1
				WHILE n
					arr[row][col + n] = "←"
					n = n - 1
				WEND
			ENDIF
		NEXT
	NEXT
FEND

//////////////////////////////////////////////////
// 【引数】
//   InPrivate : InPrivateブラウズ・モードを有効にするときはTRUEを指定(デフォルトはFALSE) 
// 【戻値】
//   InternetExplorerオブジェクト 
//////////////////////////////////////////////////
FUNCTION IEBoot(InPrivate = FALSE)
	DIM IE
	SELECT InPrivate
		CASE TRUE
			DOSCMD("start iexplore -private")
			GETID("InPrivate - Internet Explorer - [InPrivate]", "IEFrame", -1)
			IE = GETACTIVEOLEOBJ("InternetExplorer.Application","InPrivate - Internet Explorer - [InPrivate]")
		CASE FALSE
			TRY
				IE = CREATEOLEOBJ("InternetExplorer.Application")
				IE.Visible = TRUE
			EXCEPT
				EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
				GETID("Internet Explorer", "IEFrame", -1)
				TRY
					IE = GETACTIVEOLEOBJ("InternetExplorer.Application")	
				EXCEPT
					IE = getIEObj(-1)
				ENDTRY
			ENDTRY
	SELEND
	RESULT = IE
FEND

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
    (1) (2) (3) (5) (6) (9)
  1. Element.getElementsByTagName(10)
  2. Elements.Item(11)
  3. (13) (15) (16,32) (21,22,23,24) (26,27,28,29,30,35,36) (32) (34)

関連記事

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