目次
Web上(IE)のリンクを選択します。正しく処理できた場合はTrue、処理できなかった場合はFalseを返します。
リンク文字列は完全一致・部分一致(前方一致、後方一致)いずれも指定可能です。
新しく開いたタブを操作したい場合は、getIEObj関数 (自作関数)を使います。
- 構文
- Boolean = IELINK( IE, リンク表示文字, 番号, 完全一致フラグ )
- 引数
- IE (Object)必須
- IEオブジェクト
- リンク表示文字 (String)必須
- 表示されているリンク項目 (一部分だけでも可)
- 番号 (Integer)省略可
- リンク表示文字が同じ場合に順番指定
- 完全一致フラグ (Boolean = False)省略可
- Trueの時は完全に一致するものだけを (デフォルト:False)
- 戻り値
- TRUE
- 正常
- FALSE
- 処理不能
使い方
IFB IELINK(IE, "文字列") THEN
// リンクをクリックできたときの処理
ELSE
// リンクをクリックできなかったときの処理
ENDIF
DIM i = 1
WHILE IELINK(IE, "文字列", i)
// i個目のリンクをクリックできたときの処理
i = i + 1
WEND
リンク文字列の指定方法
リンク文字列は一部分でもクリックされます。
以下はYahoo! JAPANトップページにある「PayPayモール」のリンクをクリックする例。
aタグ内にある文字列をIELINKの第二引数に指定します。
<a href="https://paypaymall.yahoo.co.jp">PayPayモール</a>
IELINK(IE, "PayPayモール", TRUE)
IELINK(IE, "PayPay")
IELINK(IE, "モール")
リンク文字列全体を指定した場合、完全一致フラグをTrueにするのがおすすめです。
以下のようにタグが入れ子になっている場合は、タグ毎にひとかたまりとし、文字列を指定します。
<a href="http://news.yahoo.co.jp/pickup/6401161">
<div>
<div>
<h1>
<span>開始半年 総接種回数1億回超え</span>
</h1>
<span>
<span>NEW</span>
</span>
<span>
<span>1060</span>
</span>
</div>
</div>
</a>
例えば上記のようなHTMLの場合、以下のいずれの書き方でもリンクを開くことができます。
IELINK(IE, "開始半年 総接種回数1億回超え")
IELINK(IE, "NEW")
IELINK(IE, "1060")
「NEW」や「1060」は他と被り予期してないリンクが開く可能性があるので、他と被らないようなリンク文字列を指定するようにします。
タグをまたぐリンク文字列を指定することはできません。以下は失敗します。
IELINK(IE, "開始半年 総接種回数1億回超えNEW")
リンク表示文字列を取得するプログラム
以下は指定したURLにある全リンクを取得し、IELINKに指定できる文字列を取得するプログラムです。
第三引数が「1」の場合、省略可能です。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://example.com")
BusyWait(IE)
HASHTBL string = HASH_SORT
elements = IE.document.getElementsByTagName("a")
DIM cnt = 0
FOR element IN elements
FUKIDASI(cnt + "/" + (elements.length - 1))
WITH element
DIM array = SPLIT(.innerText, "<#CR>")
FOR item IN array
string[item] = string[item] + 1
NEXT
ENDWITH
cnt = cnt + 1
NEXT
DIM dummy = string["", HASH_REMOVE]
DIM res = ""
FOR i = 0 TO LENGTH(string) - 1
res = res + "IELINK(IE, <#DBL>" + string[i, HASH_KEY] + "<#DBL>, " + string[i, HASH_VAL] + ")<#CR>"
NEXT
DIM ID = EXEC("notepad")
SENDSTR(ID, res)
Yahoo! JAPANトップページで取得した例。
IELINK(IE, "「韓国選手が見当たらない」中継陣も当惑…閉幕式「韓国パッシング」論争", 1)
IELINK(IE, "「真夏の大冒険」名実況の裏側", 1)
IELINK(IE, "「人間の鎖」", 1)
IELINK(IE, "「犯行は5、6年前から考えていた」小田急線内で10人切りつけ 36歳男の女性へのゆがんだ感情", 1)
IELINK(IE, "『CDTVライブ!ライブ!夏フェス』第1夜出演者発表 Kis-My-Ft2、SixTONES、JO1、今市隆二ら11組", 1)
IELINK(IE, "【MLB】大谷翔平出場試合で珍事 乱入者をボールガールが撃退、米称賛「教科書のようなテク」", 1)
IELINK(IE, "【甲子園】東明館 守り勝って聖地初勝利だ「失点最小限に食い止めて」監督", 1)
IELINK(IE, "【甲子園】日本航空のキーマンはヴァデルナ・フェルガス 豊泉啓介監督「失点...", 1)
IELINK(IE, "【東京五輪】メキシコ代表、選手村でお土産“爆買い” 箸やTシャツなど購入「とても素敵なお土産ですね」", 1)
IELINK(IE, "0:51", 1)
IELINK(IE, "0:56", 1)
IELINK(IE, "1", 1)
IELINK(IE, "1191", 1)
IELINK(IE, "13件の情報があります(17:05)", 1)
IELINK(IE, "1512", 1)
IELINK(IE, "1568", 1)
IELINK(IE, "1日順延の甲子園開幕戦へ 米子東4元号での勝利へ「全員で戦っていきた...", 1)
IELINK(IE, "2", 1)
IELINK(IE, "2021年8月9日(月)", 1)
IELINK(IE, "2138", 1)
IELINK(IE, "3", 1)
IELINK(IE, "335", 1)
IELINK(IE, "4", 1)
IELINK(IE, "5", 1)
IELINK(IE, "516", 1)
IELINK(IE, "65", 1)
IELINK(IE, "8/9(月) 11:57", 1)
IELINK(IE, "875", 1)
IELINK(IE, "ABEMA TIMES", 1)
IELINK(IE, "AERA dot.", 2)
IELINK(IE, "ebookjapan", 1)
IELINK(IE, "ENCOUNT", 1)
IELINK(IE, "fall", 2)
IELINK(IE, "FNNプライムオンライン", 1)
IELINK(IE, "FRIDAY", 3)
IELINK(IE, "GOAL", 1)
…(中略)…
IELINK(IE, "野々村真", 1)
IELINK(IE, "野々村真 コロナ", 1)
IELINK(IE, "野々村真、コロナ重症化の瀬戸際で現在、絶対安静…妻・俊恵さん「両方の肺が真っ白で…」", 1)
IELINK(IE, "利用規約", 1)
IELINK(IE, "履き心地の良い「New Balance」", 1)
IELINK(IE, "離婚発表…篠原涼子と市村正親が「理想の家族」だった頃", 1)
IELINK(IE, "林葉直子 河村たかし市長に「人様のメダルをかじるのはどうかなぁ」", 1)
IELINK(IE, "路線情報", 1)
IELINK(IE, "話題のキーワードをもっと見る", 1)
IELINK(IE, "櫻井よしこ", 1)
完全一致フラグ
完全一致フラグとは、リンク表示文字列全体を指定してマッチしたときTrueになります。
<ul>
<li><a href="https://www.ikyu.com/">一休.com</a></li>
<li><a href="https://restaurant.ikyu.com/rsCosite.asp">一休.comレストラン</a></li>
</ul>
上記のようなHTMLのとき、1つ目は「一休.com」がクリックされ、2つ目は「一休.comレストラン」がクリックされます。
IELINK(IE, "一休.com", 1)
IELINK(IE, "一休.com", 2)
しかし、第四引数の完全一致フラグをTrueにすると、1つ目は「一休.com」がクリックされますが、2つ目はリンク文字列の一部しか指定していないため失敗します。
IELINK(IE, "一休.com", 1, TRUE)
IELINK(IE, "一休.com", 2, TRUE)
タグの入れ子でリンク文字列がわかれているような場合、完全一致フラグは使えません。
<a href="https://news.yahoo.co.jp/pickup/6401188/">盗み見防止 番号ないクレカ人気<span>942</span></a>
以下のいずれの書き方も失敗します。
IELINK(IE, "盗み見防止 番号ないクレカ人気942", 1, TRUE)
IELINK(IE, "盗み見防止 番号ないクレカ人気 942", 1, TRUE)
この場合は部分一致で指定します。第四引数のFALSEは省略可能。
IELINK(IE, "盗み見防止 番号ないクレカ人気942", 1, FALSE)
リンクをクリックする他の方法
<a>タグの属性値(id, class)で指定
id名
DIM element = IE.document.getElementById(id名)
element.click()
BusyWait(IE)
class名
DIM elements = IE.document.getElementsByClassName(class名)
DIM element = elements.Item(0)
element.click()
Itemの引数は0〜(elements.length-1)の間で指定。
他の属性値で指定
DIM element = IE.document.getElementsByTagName("a")
FOR element IN elements
IFB element.getAttribute(属性値) = 値 THEN
element.click()
BusyWait(IE)
BREAK
ENDIF
NEXT
「aria-label」という属性で値が「動画で検索」の場合、以下のようになります。
<a href="" aria-label="動画で検索">動画</a>
DIM element = IE.document.getElementsByTagName("a")
FOR element IN elements
IFB element.getAttribute("aria-label") = "動画で検索" THEN
element.click()
BusyWait(IE)
BREAK
ENDIF
NEXT
画像
画像のURL(src属性)がわかっている場合
<a href="">
<img decoding="async" src="http://example.com/img/uwsc.png" />
</a>
DIM element = IE.document.getElementsByTagName("img")
FOR element IN elements
IFB element.getAttribute("src") = "http://example.com/img/uwsc.png" THEN
element.click()
BusyWait(IE)
ENDIF
NEXT
alt属性がわかっている場合
全画像を取得・ループし要素を特定、もしくはaltClick関数 (自作関数)関数を使います。
DIM elements = IE.document.Images
FOR i = 0 TO elements.length - 1
WITH elements.Item(i)
IFB .Alt = 値 THEN
.click()
BusyWait(IE)
BREAK
ENDIF
ENDWITH
NEXT
<a href="">
<img decoding="async" src="sunflower.png" alt="ひまわり" />
</a>
altClick(IE, "ひまわり")
使い方
-
検索結果などのページングで「次へ」リンクがある限りループする書き方。
REPEAT // 処理 DIM flg = IELINK(IE, "次へ") BusyWait(IE) UNTIL !flg
以下はGoogleの検索結果で「次へ」がある限りクリックし続ける例。
ESCキーで強制終了します。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit") DIM IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE IE.Navigate("http://www.google.com") BusyWait(IE) IESETDATA(IE, "UWSC", "q") IESETDATA(IE, TRUE, "btnK") BusyWait(IE) REPEAT SLEEP(3.000) DIM flg = IELINK(IE, "次へ") BusyWait(IE) UNTIL !flg
プログラム実行例
Yahoo! JAPANのトップページからショッピングのリンクをクリックする
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://www.yahoo.co.jp")
BusyWait(IE)
IELINK(IE, "ショッピング")
BusyWait(IE)
//////////////////////////////////////////////////
// 【引数】
// 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
//////////////////////////////////////////////////
// 【引数】
// needle : 検索する値
// haystack : 配列
// 【戻り値】
// needleが見つかった場合に配列のキー
//////////////////////////////////////////////////
FUNCTION arraySearch(needle, haystack[])
DIM i = 0
FOR item IN haystack
IFB item = needle THEN
RESULT = i
EXIT
ENDIF
i = i + 1
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// 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
//////////////////////////////////////////////////
// 【引数】
// 文字列 or 数値 : 取得したい<a href="https://uwsc.jp/com/ie/" >InternetExplorer オブジェクト</a>のタイトル・URLもしくは数値を指定
// 完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得)
// 【戻り値】
// 条件に一致する<a href="https://uwsc.jp/com/ie" >InternetExplorer</a>
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM ShellWindows = Shell.Windows
DIM IE[-1]
FOR i = 0 TO ShellWindows.Count - 1
TRY
IFB ShellWindows.Item(i).Name = "Internet Explorer" THEN
arrayPush(IE, ShellWindows.Item(i))
ENDIF
EXCEPT
ENDTRY
NEXT
SELECT CHKNUM(str)
CASE TRUE
IFB str = 0 THEN
RESULT = LENGTH(IE)
ELSE
IF str < 0 THEN str = str + LENGTH(IE) + 1
TRY
RESULT = IE[str-1]
EXCEPT
RESULT = ERR_VALUE
ENDTRY
ENDIF
CASE FALSE
DIM pattern = IIF(flg, "^" + str + "$", str)
DIM titleList = SLICE(IE)
FOR i = 0 TO UBound(titleList)
titleList[i] = titleList[i].Document.title
NEXT
DIM urlList = SLICE(IE)
FOR i = 0 TO UBound(urlList)
urlList[i] = urlList[i].Document.URL
NEXT
DIM num = ERR_VALUE
SELECT TRUE
CASE pregGrep(pattern, titleList) <> FALSE; num = arraySearch(pregGrep(pattern, titleList)[0], titleList)
CASE pregGrep(pattern, urlList) <> FALSE; num = arraySearch(pregGrep(pattern, urlList)[0], urlList)
SELEND
TRY
RESULT = IE[num]
EXCEPT
RESULT = ERR_VALUE
ENDTRY
SELEND
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
//////////////////////////////////////////////////
// 【引数】
// pattern : 検索するパターンを表す文字列
// array : 検索される配列
// 【戻り値】
//
//////////////////////////////////////////////////
FUNCTION pregGrep(pattern, array[], flags = 0)
DIM res[-1]
FOR item IN array
IF reTest(item, pattern) THEN arrayPush(res, item)
NEXT
RESULT = SLICE(res)
FEND
//////////////////////////////////////////////////
// 【引数】
// str : 正規表現による検索の対象となる文字列
// Pattern : 正規表現で使用するパターンを設定
// IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
// Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻り値】
// 正規表現にマッチするかどうかを示すブール値
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
DIM re = CREATEOLEOBJ("VBScript.RegExp")
re.Pattern = Pattern
re.IgnoreCase = IgnoreCase
re.Global = Global
RESULT = re.Test(str)
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
楽天PointClubでランクと保有ポイント数を取得する
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("https://point.rakuten.co.jp/")
BusyWait(IE)
DIM elements
// ログインする
elements = IE.document.getElementsByClassName("name")
IFB elements.length = 0 THEN
IELINK(IE, "ログイン")
BusyWait(IE)
IESETDATA(IE, READINI("楽天", "ID", "楽天.INI"), "u") // ユーザID
IESETDATA(IE, READINI("楽天", "PASS", "楽天.INI"), "p") // パスワード
IESETDATA(IE, TRUE, "submit") // ログイン
BusyWait(IE)
ENDIF
// ランク
elements = IE.document.getElementsByClassName("rank")
elements = elements.Item(0).getElementsByTagName("em")
PRINT elements.Item(0).innerText
// ポイント
elements = IE.document.getElementsByClassName("point-total")
elements = elements.Item(0).getElementsByTagName("dd")
PRINT elements.Item(0).innerText
IE.Quit
//////////////////////////////////////////////////
// 【引数】
// 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
//////////////////////////////////////////////////
// 【引数】
// needle : 検索する値
// haystack : 配列
// 【戻り値】
// needleが見つかった場合に配列のキー
//////////////////////////////////////////////////
FUNCTION arraySearch(needle, haystack[])
DIM i = 0
FOR item IN haystack
IFB item = needle THEN
RESULT = i
EXIT
ENDIF
i = i + 1
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// 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
//////////////////////////////////////////////////
// 【引数】
// 文字列 or 数値 : 取得したい<a href="https://uwsc.jp/com/ie/" >InternetExplorer オブジェクト</a>のタイトル・URLもしくは数値を指定
// 完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得)
// 【戻り値】
// 条件に一致する<a href="https://uwsc.jp/com/ie" >InternetExplorer</a>
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM ShellWindows = Shell.Windows
DIM IE[-1]
FOR i = 0 TO ShellWindows.Count - 1
TRY
IFB ShellWindows.Item(i).Name = "Internet Explorer" THEN
arrayPush(IE, ShellWindows.Item(i))
ENDIF
EXCEPT
ENDTRY
NEXT
SELECT CHKNUM(str)
CASE TRUE
IFB str = 0 THEN
RESULT = LENGTH(IE)
ELSE
IF str < 0 THEN str = str + LENGTH(IE) + 1
TRY
RESULT = IE[str-1]
EXCEPT
RESULT = ERR_VALUE
ENDTRY
ENDIF
CASE FALSE
DIM pattern = IIF(flg, "^" + str + "$", str)
DIM titleList = SLICE(IE)
FOR i = 0 TO UBound(titleList)
titleList[i] = titleList[i].Document.title
NEXT
DIM urlList = SLICE(IE)
FOR i = 0 TO UBound(urlList)
urlList[i] = urlList[i].Document.URL
NEXT
DIM num = ERR_VALUE
SELECT TRUE
CASE pregGrep(pattern, titleList) <> FALSE; num = arraySearch(pregGrep(pattern, titleList)[0], titleList)
CASE pregGrep(pattern, urlList) <> FALSE; num = arraySearch(pregGrep(pattern, urlList)[0], urlList)
SELEND
TRY
RESULT = IE[num]
EXCEPT
RESULT = ERR_VALUE
ENDTRY
SELEND
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
//////////////////////////////////////////////////
// 【引数】
// 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
//////////////////////////////////////////////////
// 【引数】
// pattern : 検索するパターンを表す文字列
// array : 検索される配列
// 【戻り値】
//
//////////////////////////////////////////////////
FUNCTION pregGrep(pattern, array[], flags = 0)
DIM res[-1]
FOR item IN array
IF reTest(item, pattern) THEN arrayPush(res, item)
NEXT
RESULT = SLICE(res)
FEND
//////////////////////////////////////////////////
// 【引数】
// str : 正規表現による検索の対象となる文字列
// Pattern : 正規表現で使用するパターンを設定
// IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
// Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻り値】
// 正規表現にマッチするかどうかを示すブール値
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
DIM re = CREATEOLEOBJ("VBScript.RegExp")
re.Pattern = Pattern
re.IgnoreCase = IgnoreCase
re.Global = Global
RESULT = re.Test(str)
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
- 総保有ポイント
- 559
ゴールド会員
559