UBound

タグ:

配列の最大インデックスを返します。

構文
  1. Integer = UBound( 配列 )
引数
配列
上限値を求める配列
戻値
配列の上限値

プログラム

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND

解説

  1. 2行目
    	RESULT = RESIZE(array)
    
    配列のサイズを戻値として返す。

プログラム実行例

無線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. 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"]

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
  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"]の値を出力します。

画像ファイルの情報を取得

「ピクチャ\100ANDRO\20210314」にある画像ファイルの情報を出力。

CONST ssfMYPICTURES = 39

HASHTBL iColumn

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfMYPICTURES)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = FSO.BuildPath(Folder.Self.Path, "100ANDRO\20210314")
Folder = Shell.NameSpace(path)
FolderItems = Folder.Items

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

DIM temp = uniqueFilename(FSO.BuildPath(path, "Info.csv"))
FSO.CreateTextFile(temp, FALSE, FALSE)

DIM FID = FOPEN(temp, F_READ OR F_WRITE)

DIM array[] = "ファイル名", "撮影日時", "幅", "高さ", "サイズ", "ビットの深さ", "パス", "焦点距離", "向き"

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

DIM row = 2
DIM extensions[] = ".jpg", ".jpeg", ".png", ".bmp"

FOR FolderItem IN FolderItems
	FUKIDASI(row + "/" + FolderItems.Count)
	IF inArray(Folder.GetDetailsOf(FolderItem, iColumn["ファイル拡張子"]), extensions) = FALSE THEN CONTINUE
	FOR i = 1 TO UBound(array)
		FPUT(FID, Folder.GetDetailsOf(FolderItem, iColumn[array[i]]), row, i)
	NEXT
	row = row + 1
NEXT

FCLOSE(FID)

//////////////////////////////////////////////////
// 【引数】
//   needle : 探す値 
//   haystack : 配列 
//   strict 
// 【戻値】
//   TRUE : 配列中に指定した値が存在する、FALSE : 配列中に指定した値が存在しない 
//////////////////////////////////////////////////
FUNCTION inArray( needle, haystack[], strict = FALSE)
	DIM res = FALSE
	FOR item IN haystack
		IFB needle = item THEN
			res = TRUE
			BREAK
		ENDIF
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   path : ファイルのパス 
// 【戻値】
//   重複しないファイル名 
//////////////////////////////////////////////////
FUNCTION uniqueFilename(path)
	DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
	IFB FSO.FileExists(path) THEN
		DIM fol = FSO.GetParentFolderName(path)
		DIM filename = FSO.GetBaseName(path)
		DIM extension = FSO.GetExtensionName(path)
		DIM i = 2
		WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension))
			i = i + 1
		WEND
		RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension)
	ELSE
		RESULT = path
	ENDIF
FEND
  1. CREATEOLEOBJ
  2. Shell.NameSpace
  3. FSO.BuildPath
  4. Shell.Folder.Items
  5. uniqueFilename
  6. FSO.CreateTextFile
  7. FOPEN
  8. UBound
  9. FPUT
  10. FUKIDASI
  11. inArray
  12. Shell.Folder.GetDetailsOf
  13. FCLOSE

ハイアンドロー

DIM cards[-1]
DIM mark[3] = "♠", "♥", "♣", "♦"

FOR item IN mark
	FOR n = 1 TO 13
		arrayPush(cards, item + n)
	NEXT
NEXT

FisherYates(cards)

FOR n = 0 TO UBound(cards) - 1
	DIM res = SLCTBOX(SLCT_BTN OR SLCT_NUM, 0, "次のカードは「 " + cards[n] + " 」よりHIGH、LOW?", "HIGH", "LOW")
	PRINT cards[n] + "<#TAB>" + COPY(cards[n], 2)
	PRINT cards[n+1] + "<#TAB>" + COPY(cards[n+1], 2)
	DIM before = VAL(COPY(cards[n], 2))
	DIM after = VAL(COPY(cards[n+1], 2))
	IF res = 0 THEN operator = "<"
	IF res = 1 THEN operator = ">"
	res = IIF(before + operator + "=" + after, "正解", "不正解")
	PRINT res
	IF res = "不正解" THEN EXIT
	PRINT "----------"
NEXT

MSGBOX("全問正解!!!")

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

//////////////////////////////////////////////////
// 【引数】
//   var arr[] : シャッフルする配列(参照引数) 
// 【戻値】
// 
//////////////////////////////////////////////////
PROCEDURE FisherYates(var arr[])
	FOR n = UBound(arr) TO 0 STEP -1
		DIM num = RANDOM(n+1)
		DIM tmp = arr[n]
		arr[n] = arr[num]
		arr[num] = tmp
	NEXT
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

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
  1. arrayPush
  2. FisherYates
  3. UBound
  4. SLCTBOX
  5. COPY
  6. VAL
  7. IIF
結果
♦12 12
♠1 1
正解
----------
♠1 1
♥7 7
正解
----------
♥7 7
♥13 13
正解
----------
♥13 13
♦9 9
正解
----------
♦9 9
♥1 1
正解
----------
♥1 1
♥5 5
正解
----------
♥5 5
♥10 10
正解
----------
♥10 10
♣4 4
正解
----------
♣4 4
♠10 10
正解
----------
♠10 10
♥6 6
不正解

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

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. 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)

//////////////////////////////////////////////////
// 【引数】
//   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
			// rowSpan(行結合)とcolSpan(列結合)の両方があれば
			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
			// rowSpan(行結合)があれば結合セルに「↑」を代入
			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
			// colSpan(列結合)があれば結合セルに「←」を代入
			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. 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