(for Internet Explorer)
← ▼ ▲
↑
ScanMultipleFromTemplate
Sub ScanMultipleFromTemplate( ScanString as string, TemplateString as string,
Keywords as array of string, Option_ as Empty,
out_Scaned as array of dictionary of string )
文字列からテンプレートを複数回適用してテンプレートの変数部分を取り出します。
【引数】
ScanString
TemplateString
取り出す文字列を含む文字列
取り出す部分を指定する文字列
Keywords
TemplateString に書かれた取り出す部分の文字列の配列
→ T_Str.vbs
テスト
Empty を指定してください
Option_
サンプル
ScanMultipleFromTemplate _
" [1,2] [3,4] ",_
"[${A},${B}]",_
Array( "${A}", "${B}" ), Empty, out '//(out) out
Assert out(0)("${A}") = "1"
Assert out(0)("${B}") = "2"
Assert out(1)("${A}") = "3"
Assert out(1)("${B}") = "4"
→ vbslib.vbs
ソース
取り出した文字列の辞書の配列
out_Scaned
T_ScanMultipleFromTemplate
参考
→ ScanFromTemplate
テンプレートを１回適用する場合
KeywordArray に配列ではない文字列を指定した場合、out_Scaned には辞書ではない
配列が出力されます。
サンプル
ScanMultipleFromTemplate _
" [1] [2] ",_
"[#]", "#", Empty, out '//(out) out
Assert out(0) = "1"
Assert out(1) = "2"
関連
→ ScanFromTemplate
← ▼ ▲
InStrEx
Function InStrEx( WholeString as string, Keyword as string, StartIndex as integer,
Opt as integer ) as integer
オプションを指定して文字列を検索します。
【引数】
WholeString
Keyword
検索対象になる文字列
検索するキーワード。 複数指定するときは配列型で
StartIndex
検索を開始する位置。先頭=1。 全体を検索（先頭または末尾）=0
返り値
Opt
下記のフラグ、または Empty
見つかった文字列の先頭の位置。 0=見つからなかった
サンプル
単語全体にマッチする文字列を検索します
Set c = g_VBS_Lib
Assert InStrEx( "answer ans", "ans", 1, c.WholeWord or c.CaseSensitive ) = 8
Opt 引数
c.WholeWord
下記のフラグを複数指定するときは、or で接続してください。
なお、c は、g_VBS_Lib の返り値です。
英語の単語全体にマッチする文字列を検索します。
このフラグを指定しなければ、単語の一部にキーワードを含む単語も
検索にヒットします。
c.Rev
c.CaseSensitive
大文字、小文字を区別します。
このフラグを指定しなければ、大文字、小文字が異なる文字列も
検索にヒットします。
前方（左上方向）に向かって検索します。
このフラグを指定しなければ、後方（右下方向）に向かって検索します。
"answer ans", "ans"
テスト
→ T_Str.vbs
c.LastNextPos
返り値を、見つかった文字列の末尾の次の位置にします。
(src)
→ IsWholeWord
参考
参考
→ InStrLast
T_InStrEx
T_InStrExWholeWord
T_InStrExArray
c.LineHead
検索キーワードが行頭にある場所を検索します。
検索キーワードが行末にある場所を検索します。
c.LineTail
T_InStrExLineHeadTail
指定したキーワードのどれか最初にマッチした文字列を検索します
pos = InStrEx( text, Array( "{{", "}}", "＝" ), pos, Empty )
サンプル
Array( "{{", "}}", "＝" )
← ▼ ▲
InStrLast
Function InStrLast( WholeString as string, Keyword as string ) as integer
文字列を検索して、最初に見つかったキーワードの末尾の次の位置を返します。
【引数】
WholeString
Keyword
検索対象になる文字列
検索するキーワード
返り値
キーワードの末尾の次の位置、見つからない=0
→ T_Str.vbs # [T_InStrLast]
テスト
InStrLast( "ABCDEF", "CD" ) = 5 '// E の位置
サンプル
→ InStrEx
関連
ソース
→ vbslib.vbs
← ▼ ▲
IsWholeWord
(src)
Function IsWholeWord( WholeString as string, StartIndex as integer, SubWordLen as integer )
as integer
文字列の中の指定した範囲が、単語単位になっているかどうかを返します。
【引数】
WholeString
StartIndex
検索対象になる文字列
範囲の開始位置。 先頭=1。文字単位
SubWordLen
範囲の長さ（文字数）
単語単位になっているかどうか
返り値
サンプル
Assert IsWholeWord( "This is a pen.", 6, 2 ) = True
Assert IsWholeWord( "This", 2, 2 ) = False
Assert IsWholeWord( "This is", 1, 7 ) = True
範囲の中に複数の単語があっても、両端が単語の単位になっていれば True になります。
→ InStrEx
関連
ソース
→ vbslib.vbs
← ▼ ▲
StrMatchKey クラス
(src)
.Keyword
.IsMatch
Function StrMatchKey::IsMatch( TestStr as string ) as Boolean
* のワイルドカードを使って、マッチするかどうかを高速に判定します。
* は２つ以上指定できません。エラーになります。
Property Keyword as string
ワイルドカードを含むキーワード。
TestStr が、.Keyword で設定したワイルドカードにマッチするかどうかを返す。
大文字小文字を区別しません。
.IsMatchULCase
TestStr が、.Keyword で設定したワイルドカードにマッチするかどうかを返す。
大文字小文字を区別します。
Function StrMatchKey::IsMatch( TestStr as string ) as Boolean
サンプル：
Set match = new StrMatchKey
match.Keyword = LCase( "*.TXT" )
If match.IsMatch( "file1.txt" ) Then
:
End If
file1.txt
*.TXT
大文字小文字を区別しないときは、LCase を使って小文字にしてください。
テスト
→ T_Wildcard.vbs # [T_StrMatchKey]
.Test
.IgnoreCase
RegExp と同じ
関連
→ ReplaceFileNameWildcard
← ▼ ▲
StringReplaceSetClass
.Replace
テキストを置き換えることを登録します。
.ReplaceRange
指定のタグで囲まれたテキストを置き換えることを登録します。
テキストを置き換える手順のオブジェクト。
同じ手順を繰り返すことや、置き換える手順をパラメーター化できます。
.DoReplace
登録しておいた処理を実行します。
Set rep = new StringReplaceSetClass
rep.Replace "from", "to"
output_text = rep.DoReplace( input_text )
関連
テスト
サンプル
ソース
→ T_Wildcard.vbs
→ OpenForReplace
→ vbslib.vbs
T_StringReplaceSet
T_StringReplaceSet_Range
← ▼ ▲
Replace (StringReplaceSetClass)
Sub StringReplaceSetClass::Replace( FromText as string, ToText as string )
テキストを置き換えることを登録します。
【引数】
FromText
ToText
置き換える前のテキスト
置き換えた後のテキスト
[ 親: StringReplaceSetClass クラス ]
参考
→ Replace (ReplaceTextFile1)
← ▼ ▲
ReplaceRange (StringReplaceSetClass)
Sub StringReplaceSetClass::ReplaceRange( StartOfFromText as string, EndOfFromText as string,
ToText as string )
指定のタグで囲まれたテキストを置き換えることを登録します。
【引数】
StartOfFromText
EndOfFromText
置き換える前のテキストが始まる場所にあるタグ（テキスト）
置き換える前のテキストが終わる場所にあるタグ（テキスト）
置き換えた後のテキスト。 通常、タグも含む。
ToText
[ 親: StringReplaceSetClass クラス ]
参考
→ ReplaceRange (ReplaceTextFile1)
← ▼ ▲
DoReplace (StringReplaceSetClass)
Function StringReplaceSetClass::DoReplace( InputText as string ) as string
登録しておいた処理を実行します。
[ 親: StringReplaceSetClass クラス ]
【引数】
InputText
返り値
置き換える前のテキスト
置き換えた後のテキスト
← ▼ ▲
new_RegExp
Set re = new_RegExp( "Function\(.*\)", True )
Function new_RegExp( Pattern as string, IsCaseSensitive as boolean ) as RegExp
オブジェクトを簡易的に生成します。
【引数】
Pattern
IsCaseSensitive
正規表現
大文字小文字を区別するかどうか
返り値
正規表現オブジェクト
サンプル
正規表現 (VBScript.RegExp)
→ 正規表現
ソース
→ vbslib.vbs
new Regular Expression
← ▼ ▲
FindStringLines
Assert FindStringLines( "abc"+ vbCRLF +"def", "ab", Empty ) = "abc"+ vbCRLF
Function FindStringLines( in_BeforeString as string, in_RegularExpression as string or RegExp,
in_Option as Empty )
複数行の文字列を、正規表現でマッチする行だけにします。
【引数】
in_BeforeString
in_RegularExpression
変換前の文字列
正規表現の文字列、または
in_Option
Empty または False (=マッチしない行だけにする)
テスト
サンプル
ソース
T_FindStringLines
→ T_Wildcard.vbs
→ vbslib.vbs
変換後の文字列
返り値
関連
→ StartReplace
→ PassThroughLineFilters
Assert FindStringLines( "abc"+ vbCRLF +"def", ".*", Empty ) = "abc"+ vbCRLF +"def"
参考
→ 正規表現
Set rep = OpenForReplace( "file1.txt", Empty )
rep.Text = FindStringLines( rep.Text, """ERROR""", Empty )
rep = Empty
→ Text (ReplaceTextFile1) (OpenForReplace)
RegExp オブジェクト
→ 正規表現
→ find (DOS バッチファイル)
→ find_c
→ find
→ ArrayFromLines
→ grep コマンド
← ▼ ▲
SortStringLines
Function SortStringLines( in_BeforeString as string, in_IsDuplicated as boolean )
テスト
ソース
T_FindStringLines
→ T_Wildcard.vbs
→ vbslib.vbs
複数行の文字列を、行単位で整列（ソート）します。
【引数】
in_BeforeString
in_IsDuplicated
整列前の文字列
重複する行をそのまま残すかどうか。 False = 重複したら１行にする
整列後の文字列
返り値
lines = _
"A"+ vbCRLF +_
"C"+ vbCRLF +_
"F"+ vbCRLF +_
"C"
lines = SortStringLines( lines, False )
Assert lines = _
"A"+ vbCRLF +_
"C"+ vbCRLF +_
"F"+ vbCRLF
サンプル
関連
→ uniqバッチファイル Windows Script Programming (Web)
→ ソートされたファイルから重複した行を削除するには (Web)
→ sort (DOS バッチファイル)
→ SortLines コマンド
→ ArrayFromLines
整列前の文字列の最後の行に改行文字がないときは、先頭の行にある改行文字が追加されます。
in_IsDuplicated = False のとき、改行文字だけ異なる行も、１行にします。
← ▼ ▲
GetLeftEndOfLinePosition
Function GetLeftEndOfLinePosition( in_Text as string, in_PositionInText as integer )
現在位置にある行の先頭の位置を返します。
【引数】
in_Text
in_PositionInText
全体の文字列
現在位置、先頭 = 1
現在位置にある行の先頭の位置
返り値
lines = _
"A"+ vbCRLF +_
"C"+ vbCRLF +_
"F"+ vbCRLF +_
"K"
Assert GetPreviousLinePosition( lines, InStr( lines, "F" ) ) = InStr( lines, "F" )
Assert GetPreviousLinePosition( lines, InStr( lines, "F" ) + 1 ) = InStr( lines, "F" )
Assert GetPreviousLinePosition( lines, 1 ) = 1
サンプル
T_GetPreviousLinePosition
テスト
→ T_Replace_target.vbs
ソース
→ vbslib.vbs
関連
→ GetNextLinePosition
→ GetPreviousLinePosition
← ▼ ▲
GetNextLinePosition
Function GetNextLinePosition( in_Text as string, in_PositionInText as integer )
１つ下の行の先頭の位置を返します。
【引数】
in_Text
in_OverPositionInText
全体の文字列
現在位置、先頭 = 1
１つ下の行の先頭の位置、0=下の行はない
返り値
in_OverPositionInText 引数に行の途中の位置を指定したときは、その次の行の先頭を返します。
in_OverPositionInText 引数に、最終行の中のどこかを指定したときは、0 を返します。
in_Test の末尾が改行のとき、その改行の次の文字にある行は、最終行ではありません。
Line1(CR+LF)
Line2(CR+LF)
Line1(CR+LF)
Line2
Line1(CR+LF)
(CR+LF)
… Line2 が最終行
… Line2 が最終行
… Line1の次の行が最終行
T_GetPreviousLinePosition
テスト
→ T_Replace_target.vbs
ソース
→ vbslib.vbs
← ▼ ▲
GetPreviousLinePosition
Function GetPreviousLinePosition( in_Text as string, in_OverPositionInText as integer )
１つ上の行の先頭の位置を返します。
【引数】
in_Text
in_OverPositionInText
全体の文字列
現在位置、先頭 = 1
１つ上の行の先頭の位置
返り値
lines = _
"A"+ vbCRLF +_
"C"+ vbCRLF +_
"F"+ vbCRLF +_
"K"
Assert GetPreviousLinePosition( lines, InStr( lines, "F" ) ) = InStr( lines, "C" )
Assert GetPreviousLinePosition( lines, InStr( lines, "F" ) + 1 ) = InStr( lines, "F" )
Assert GetPreviousLinePosition( lines, 1 ) = 0
サンプル
T_GetPreviousLinePosition
テスト
→ T_Replace_target.vbs
ソース
→ vbslib.vbs
関連
→ FindStringLines
in_OverPositionInText 引数に行の途中の位置を指定したときは、その行の先頭を返します。
in_OverPositionInText 引数に 1 （先頭） を指定したときは、0 を返します。
← ▼ ▲
StringStream クラス
文字列を
TextStream
と同じようにアクセスします。
.SetString( Str as string )
.ReadLine
.AtEndOfStream
1行入力します。 TextStream 互換
すべて入力したかどうか。 TextStream 互換
全体の文字列を設定し、ファイルポインタを先頭に戻す。
Set file = new StringStream
file.SetString "123" +vbCRLF+ "456"
Do Until file.AtEndOfStream()
echo file.ReadLine() ' 改行(vbCR+vbLF)は含まない
Loop
file = Empty
テスト
→ T_Replace_target.vbs
改行文字は、vbLF でも構いません。
.ReadAll
.Write
.WriteLine
全体を入力します。 TextStream 互換
文字列を出力します。 TextStream 互換
１行を出力します。 TextStream 互換
出力した文字列は、ReadAll で取得できます。
Write したものを先頭から Read するときは、ReadAll したものを SetString してください。
サンプル
文字列からリードする
Set file = new StringStream
file.WriteLine "123"
file.WriteLine "456"
Assert file.ReadAll() = "123"+ vbCRLF +"456"+ vbCRLF
file = Empty
文字列へライトする
サンプル
ソース
→ vbslib.vbs
.IsWithLineFeed
リードする１行の末尾に改行コードを含める
改行文字を維持するときは、IsWithLineFeed = True にして ReadLine → Write してください。
SplitLineAndCRLF
を使えば、改行文字を分けることができます。
関連
→ FindStringLines
.Line
次にリードする行番号（１〜）
プロパティ
→ ArrayFromLines
T_StringStream
→ GetPreviousLinePosition
.ReadingLineFeed
改行文字。初期値は vbLF （LF or CR+LF）。
vbCRLF のときは、LF は行に含む
← ▼ ▲
関連
→ (CSV) ArrayFromCSV, ArrayFromCSV_Int
→ XmlAttr
→ OpenForReplace
テキストファイルの内容を変更します。
" " で囲む XML の属性値に変換します。
CSV 形式の１行を配列に格納する。
→ ファイル名・パス
→ IsWildcard
→ CutCRLF
改行文字を削除します。
→ StringStream クラス
文字列 TextStream
→ GetTextFromClipboard
クリップボードから文字列を取得します
→ GetLineCount
行数をカウントします
→ ToRegExpPattern
正規表現で使われるメタ文字も検索できるように変換します。
← ▼ ▲
日付 (Date)
← ▼ ▲
TestableNow
Function TestableNow() as Date
テストに使える現在の日時です。
【引数】
返り値
現在の日時、または、
関連
ソース
→ Now 関数
→ new_TestableNow
new_TestableNow
の設定値
→ vbslib.vbs
← ▼ ▲
new_TestableNow
Function new_TestableNow( a_Date as Date ) as TestableNowClass
が返す値を設定します。
【引数】
a_Date
TestableNow が返す値
TestableNow
削除したときに、TestableNow が返す値を現在日時に戻すオブジェクト
返り値
サンプル
Set tn = new_TestableNow( DateSerial( 2014, 1, 1 ) )
echo TestableNow()
tn = Empty
→ Date 型
ソース
→ vbslib.vbs
← ▼ ▲
IsTimeOnlyDate
Function IsTimeOnlyDate( aDateTime as Date ) as boolean
Date 型の値が、日付指定のない時刻だけの値であるかどうかを返します。
サンプル：
IsTimeOnlyDate( CDate("2009/1/1") ) = False
IsTimeOnlyDate( CDate("13:00") ) = True
(src)
← ▼ ▲
DateAddStr
Function DateAddStr( BaseDate as Date, Plus as string ) as Date
日付時刻の加減算をします。
d = DateAddStr( CDate("2009/1/1"), "+1month 10days" ) '// d = CDate("2009/2/11")
t = DateAddStr( CDate("17:00"), "-8hours" ) '// t = CDate("9:00")
t = DateAddStr( CDate("10:00"), "+1hours -5min" ) '// t = CDate("10:55")
t = DateAddStr( CDate("10:00"), "-1hours -5min" ) '// t = CDate("8:55")
t = DateAddStr( CDate("10:00"), "-1hours 5min" ) '// t = CDate("8:55")
t = DateAddStr( CDate("10:00"), "-1hours +5min" ) '// t = CDate("9:05")
t = DateAddStr( CDate("10:00"), "+2:30" ) '// t = CDate("12:30")
t = DateAddStr( CDate("10:00"), "-2:30" ) '// t = CDate("7:30")
(src)
Plus 引数
先頭は、"+" か "-" を指定します。 先頭の "+" か "-" を省略すると "+" になります。
先頭以外の "+" か "-" を省略すると、それまでの "+" か "-" を引き継ぎます。
時分は、00:00 形式で指定できます。
単位に指定できるキーワードは次のものがあります。
"year", "years", "month", "months", "day", "days"
"hour", "hours", "minute", "minutes", "min", "second", "seconds", "sec"
→ DateAdd (VBScript)
関連
→ 時間の加減算 (clib)
→ MakeRule_compare
→ T_Date.vbs # main
テスト
サンプル
サンプル
echo "日時の例：2008/06/11, 14:28:01, -1day, -2hours"
echo "Enter のみ："+ limit_str_default
limit_str = Input( "日時 >" )
If limit_str = "" Then limit_str = limit_str_default
Select Case Left( limit_str, 1 )
Case "+", "-" : limit = DateAddStr( Now(), limit_str )
Case Else : limit = CDate( limit_str )
End Select
日時でも、差分（１日前など）でもできる入力
←
↓