Hatena::Groupvb6

VB6メモ

[VB] [個人メモ] [仕事メモ] [アイデア] [Rubyの魔神]
[VB6クラス]
|

2016-06-03

VBS 正規表現

http://d.hatena.ne.jp/cloned/20090205

正規表現を使ってパターンに一致するか調べる

Newを使ってRegExpオブジェクトを取得する。パターンはRegExpオブジェクトのPatternプロパティに代入する。

Dim re
Set re = New RegExp
re.Pattern = "^A.*$"
If re.Test("ABC") Then
    WScript.Echo "matched"
End If
大文字小文字を無視する場合はIgnoreCaseにTrueを代入する。

re.IgnoreCase = True
最初の一致のみではなく、文字列全体を検索対象にする場合にはGlobalにTrueを代入する。

re.Global = True
正規表現を使って一致する文字列を取得する

RegExpオブジェクトのExecuteを使う。

Dim re, matches
Set re = New RegExp
re.Pattern = "^A.*$"
Set matches = re.Execute("ABC")
If matches.Count > 0 Then
    WScript.Echo matches(0)
End If
出力結果は「ABC」となる。

正規表現を使ってキャプチャした文字列を取得する

Itemプロパティを利用してSubMatchesを取得する。

Dim re, matches
Set re = New RegExp
re.Pattern = "^([A-F]+)_([A-F]+).+"
Set matches = re.Execute("ABC_DEF_GHI")
If matches.Count > 0 Then
    WScript.Echo matches.Item(0).SubMatches.Item(0)
    WScript.Echo matches.Item(0).SubMatches.Item(1)
End If
出力結果は「ABC」「DEF」となる。

正規表現を使って文字列を置換する

RegExpオブジェクトのReplaceを使う。

Dim re, matches
Set re = New RegExp
re.Pattern = "^ABC_"
WScript.Echo re.Replace("ABC_DEF_GHI", "XXX_")
出力結果は「XXX_DEF_GHI」となる。

正規表現を使って文字列を置換する(後方参照)

RegExpオブジェクトのReplaceを使って置換文字列中に$数字の形式で参照する。

Dim re, matches
Set re = New RegExp
re.Pattern = "^([A-Z]{2})(.*)"
WScript.Echo re.Replace("ABCDE", "XX$2")
出力結果は「XXCDE」となる。

2016-06-02

VBS動的配列を使ったArrayList

Option Explicit

dim a



set a = new ArrayList

dim t1:set t1 = new test:t1.msg="1"
a.add(t1)
dim t2:set t2 = new test:t2.msg="2"
a.add(t2)
dim t3:set t3 = new test:t3.msg="3"
a.add(t3)
msgbox(a.Count)

dim item

for each item in a.item
	item.say
next

a.clear
msgbox("clear")
for each item in a.item
	item.say
next

a.add(t1)
a.add(t2)
a.add(t3)
msgbox(a.Count)


for each item in a.item
	item.say
next


a.Items(1).msg="say"
a.Items(1).say

class test
	public msg
	public sub say
		msgbox(msg)
	end sub
end class



'動的配列版
class ArrayList

	private m_Item()
	private m_count

	public sub Add(x)
		ReDim Preserve m_item(m_count)
		If IsObject(x) Then
			set m_item(m_count) = x
		else
			m_item(m_count) = x
		end if
		m_count = m_count + 1
	end sub

	public function Count
		Count = m_count
	end function

	public function Clear
		m_count=0
		Erase m_item
	end function

	public function Item
		Item = m_Item
	end function

	public function Items(n)
		If IsObject(m_Item(n)) Then
			set Items = m_Item(n)
		else
			Items = m_Item(n)
		end if
	end function

end class


2016-05-20

VBS フォルダの再帰的検索

http://d.hatena.ne.jp/end0tknr/20120118/1326889962

Option Explicit


dim ff

set ff = new ClsFiles

ff.getFile("C:\temp")
dim item
for each item in ff.FileList
	WScript.echo item
next


class ClsFiles

	public FileList
	Dim objFSO          ' FileSystemObject

	Private Sub Class_Initialize()
		Set FileList = CreateObject("System.Collections.ArrayList")
		Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	End Sub


	public sub getFile(path)
		FindFolder objFSO.getFolder(path)
	end sub

	' フォルダ検索関数
	Sub FindFolder(ByVal objParentFolder)

		Dim objFile
		Dim resultLine
		For Each objFile In objParentFolder.Files
			FileList.add objFile.ParentFolder & "\" & objFile.Name
		    'FIND_RESULT_FILE_OBJ.Write(objFile.ParentFolder & "\" & objFile.Name & ",")
		    'FIND_RESULT_FILE_OBJ.Write(objFile.Size & ",") 'byte
		    'FIND_RESULT_FILE_OBJ.Write(objFile.DateLastModified & ",")
		    'FIND_RESULT_FILE_OBJ.Write(Fix(Date() - objFile.DateLastModified) & ",")
		    'FIND_RESULT_FILE_OBJ.Write(objFile.DateLastAccessed & ",")
		    'FIND_RESULT_FILE_OBJ.Write(Fix(Date() - objFile.DateLastAccessed))
		    'FIND_RESULT_FILE_OBJ.WriteLine("")
		Next

		Dim objSubFolder    ' サブフォルダ
		For Each objSubFolder In objParentFolder.SubFolders
		    FindFolder objSubFolder
		Next

	End Sub

end class

2016-05-17

VBS include

http://qiita.com/honeniq/items/88462b12d2244480026a

Include "Library.vbs"  ' 外部ファイル「Library.vbs」を取込み

Sub Include(ByVal strFile)
  Dim objFSO , objStream , strDir

  Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") 
  strDir = objFSO.GetFile(WScript.ScriptFullName).ParentFolder 

  Set objStream = objFSO.OpenTextFile(strDir & "\" & strFile, 1)

  ExecuteGlobal objStream.ReadAll() 
  objStream.Close 

  Set objStream = Nothing 
  Set objFSO = Nothing
End Sub

2016-05-13

VBS EXCEL操作

http://bonk.red/articles/Excel/index.html

' WScript.GetObjectを使ってブックを開いてデータを読む。
Set book = WScript.GetObject("Book1.xls")
Set sheet = book.WorkSheets.Item(1)
WScript.Echo sheet.Cells(1, 1).Text
book.Close()
WScript.Echo "Done."
|