Home > 実用スクリプト
実用スクリプト Archive
UWSCで正規表現を使う
- 2011-12-31 (Sat)
- 実用スクリプト
UWSCで正規表現を使う場合にはVBScript又はJScriptを使うことにになるのですが、UWSCから使うならVBScriptの方が扱い安いですかね。
という事で今回はVBScriptのRegExpを使ったサンプル
正規表現のパターンの書方に関しては詳しく説明しないので各自ご確認を
- RegExpのプロパティには以下のプロパティがあります。
-
Patternプロパティ 正規表現で使用するパターン IgnoreCaseプロパティ 大文字と小文字を区別する(デフォルト:False) Globalプロパティ 文字列全体を検索する(デフォルト:False) - RegExpのメソッドには以下のメソッドがあります。
-
Executeメソッド Patternとマッチした結果をMatchesコレクションで返します。 Replaceメソッド Patternとマッチした結果をを置換文字列と置き換えます。 Testメソッド Patternとマッチした場合はTrueを返します。
Executeメソッドのサンプル
PUBLIC regvb = CreateOLEObj("VBScript.RegExp")
//--sample
//str="2012年1月1日~2012年1月30日"
//Pattern="\d+年(\d+月\d+日)"
//
//Matches=regvb_Execute(str,Pattern)
//for i=0 to Matches.Count-1
// Print Matches.item(i).Value
// Print Matches.item(i).SubMatches(0)
// Print Matches.item(i).FirstIndex
// Print Matches.item(i).Length
//next
//--
Function regvb_Execute(str,Pattern,IgnoreCase=true,Global=true)
regvb.IgnoreCase = IgnoreCase
regvb.Global = Global
regvb.Pattern=Pattern
Matches = regvb.Execute(str)
Result=Matches
Fend
- Executeメソッドを実行して帰ってくる戻値Matchesコレクションは以下のプロパティがあります。
-
Countプロパティ Matchオブジェクトの個数 Itemプロパティ MatchオブジェクトをMatches.Item(数字)で返す - Matchオブジェクト(=Matches.Item(数字))には以下のプロパティとコレクションがあります。
-
Valueプロパティ マッチした文字列を返す。 Lengthプロパティ マッチした文字列の長さを返す。 FirstIndexプロパティ 最初にマッチに成功した位置を返す。先頭は0から。 SubMatchesコレクション 「()で括られた」パターングループにマッチしたコレクションを返す。
sampleを実行すると以下の結果になる
---------結果-------
2012年1月1日
1月1日
0
9
2012年1月30日
1月30日
10
10
------------------------
最初にマッチしたのは「2012年1月1日」でSubMatches(0)は「1月1日」文字位置は「0」で文字列の長さは9文字
Replaceメソッドのサンプル
PUBLIC regvb = CreateOLEObj("VBScript.RegExp")
//--sample
//str="2012年1月1日~2012年1月30日"
//Pattern="\d+年"
//Print regvb_Replace(str,Pattern,"2013年")
//--
Function regvb_Replace(str,Pattern,replStr,IgnoreCase=true,Global=true)
regvb.IgnoreCase = IgnoreCase
regvb.Global = Global
regvb.Pattern=Pattern
str = regvb.Replace(str,replStr)
Result=str
Fend
sampleを実行すると以下の結果になる
---------結果-------
2013年1月1日~2013年1月30日
------------------------
TestメソッドはMatches.countが0だと失敗、0以上だと成功という風にExecuteで代用できるので省略します。
ADODB.Streamを使ったダウンロード
- 2011-12-05 (Mon)
- 実用スクリプト
ADODB.Streamを使ったダウンロードのサンプルを作ってみました。IEのダイアログを使った方法でもいいんですがいちいちダイアログが出る分時間が掛ります。画像など連続でダウンする場合はこちらの方がいいかもです。但し、ブラウザベースじゃないと弾かれる場合もあるので適材適所で使い分けを。(※弾かれた場合も一応ファイルは作られる)
IEのダイアログ版はこら
溺れる者はUWSCを掴め! - IEでサイトからダウンロード
//------------------------------------------
//動作環境 XPsp3,IE8で確認
//---------------<書式>-------------------
// AdoDownLoad(ファイルのURL[,保存先フルパス,保存名,上書き設定])
// ※[]内省略可
//------<初期設定>-------
PUBLIC Stream=CreateOLEObj( "ADODB.Stream" )
PUBLIC oHttp=CreateOLEObj("MSXML2.XMLHTTP")
PUBLIC defalt_over_w=false //上書き初期設定(上書きする:True しない:false)
//------</初期設定>------
//---------------<sample 1>-------------------
url="http://***.com/007.jpg" //ダウン先
dl_pas="C:\Down" //保存場所のフルパス
dl_name="sample.jpg" //保存名
over_w=false
AdoDownLoad(URL,dl_pas,dl_name,over_w)
//---------------<sample 2>-------------------
//URL以外デフォルト設定の場合
url="http://***.com/007.jpg" //ダウン先
//※ファイル名は最後の"/"以下になる
AdoDownLoad(URL)
//--
Procedure AdoDownLoad(url,dl_pas="",dl_name="",over_w=defalt_over_w)
sleep(1)
ifb dl_name=""
dl_name=Betweenstr(url,"/",,-1)
endif
ifb !(dl_pas="")
ifb !(copy(dl_pas,Length(dl_pas))="\")
dl_pas=dl_pas+"\"
endif
endif
dl_pas=dl_pas+dl_name
oHttp.Open("GET",url,0)
oHttp.Send
GetStream(oHttp.responseBody,dl_pas,dl_name,over_w)
Fend
//--
Procedure GetStream(obj,dl_pas,dl_name,over_w)
ifb over_w
over_w=2
else
over_w=1
endif
Stream.Open
Stream.Type=1
Stream.Write=obj
COM_ERR_IGN
Stream.SaveToFile(dl_pas,over_w)
COM_ERR_RET
Stream.Close
Fend
IEでサイトからダウンロード
- 2011-12-03 (Sat)
- 実用スクリプト
ファイルのアップロードを作ったのでついでにダウンロードも作ってみようという事でそのサンプル
追記12/21:サンプルの最後の行Fendが抜けてました<(_ _)>
ちなみにアップロードの方はこちらで
溺れる者はUWSCを掴め! - IE8でファイルのアップロード
//------------------------------------------
//動作環境 XPsp3,IE8で確認
//---------------<書式>-------------------
// 右クリックから保存などの場合使用
// IEDownLoad(IE,ファイルのURL[,保存先フルパス,保存名,上書き設定])
// ※[]内省略可
//---------------<sample 1>-------------------
url="http:/****.****.com/down/test.txt"
dl_pas="C:\Down" //保存場所のフルパス
dl_name="sample.txt" //保存名
over_w=false //上書きする:True しない:false
IEDownLoad(IE,URL,dl_pas,dl_name,over_w)
//---------------<sample 2>-------------------
//URL以外デフォルト設定の場合
url="http:/****.****.com/down/test.txt"
IEDownLoad(IE,URL)
//--
Procedure IEDownLoad(IE,URL,dl_pas="",dl_name="",over_w=true)
IE.Navigate2(URL,"&H800")
Repeat //反応が悪いのでダイアログが消えるまで繰返す
dl=getid("ファイルのダウンロード","#32770", -1)
Ctrlwin(dl,ACTIVATE)
sckey(dl,VK_S)
sleep(1)
Until getid("ファイルのダウンロード","#32770")=-1
SaveDialog(dl_pas,dl_name,over_w)
Fend
Procedure SaveDialog(dl_pas="",dl_name="",over_w=true)
dl=getid("名前を付けて保存","#32770", -1)
ifb dl_name=""
dl_name=getstr(dl)
endif
ifb !(dl_pas="")
ifb !(copy(dl_pas,Length(dl_pas))="\")
dl_pas=dl_pas+"\"
endif
endif
dl_pas=dl_pas+dl_name
Sendstr(dl,dl_pas)
Clkitem(dl, "保存(S)")
sleep(2)
sub=getid(GET_ACTIVE_WIN,"#32770", -1)
ifb pos("上書きしますか?",getstr(sub,1,4))>0
ifb over_w
sckey(sub,VK_Y)
else
sckey(sub,VK_N)
Clkitem(dl, "キャンセル")
endif
endif
dl=getid("完了しました","#32770")
ifb !(Chkbtn(dl,"ダウンロードの完了後、このダイアログ ボックスを閉じる"))
sckey(dl,VK_C)
endif
dl=getid("ダウンロードの完了","#32770")
Clkitem(dl, "閉じる")
Fend
Home > 実用スクリプト
- Search
- Meta
- Links
- Feeds
- PR
- PR