忍者ブログ

Home > 実用スクリプト

実用スクリプト Archive

[PR]

  • 2024-05-13 (Mon)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

  • Comments (Close):
  • TrackBack (Close):

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

Page Top