(for Internet Explorer)
← ▼ ▲
↑
AnalyzeCharacterCodeSet
ファイルの文字 コード セットを判定します。
【引数】
Path
文字コードを判定するファイルのパス
Function AnalyzeCharacterCodeSet( Path as string ) as integer or string
返り値
文字 コード セット
MIME
や
new_TextFileCharSetStack
を使って開きなおしてください。
HTML
の charset によって、文字コードが指定される場合は、文字コードを調べて
XML宣言 (?xml)
の encoding="UTF-8" があるとき
c.No_BOM
c.UTF_8_No_BOM
先頭に BOM がなく、
先頭に BOM がなく、
(文字列)
の encoding があり、"UTF-8" 以外のとき
XML宣言 (?xml)
先頭に BOM がなく、
XML宣言 (?xml)
の encoding がないとき
new_TextFileCharSetStack が UTF-8 のとき
の encoding がなく、
XML宣言 (?xml)
先頭に BOM がなく、
返り値
サンプル
Set cs = new_TextFileCharSetStack( AnalyzeCharacterCodeSet( "File1.txt" ) )
CreateFile "File1.txt", "abc"
cs = Empty
同じ文字コードを使ってファイルを作成する
File1.txt
関連
→ new_TextFileCharSetStack
→ 文字エンコーディングの指定方法
→ Read_XML_Encoding
→ ファイル内の文字コードの指定
c.UTF_8
c.Unicode
先頭に UTF-8 の BOM (EF BB BF) があるとき
先頭に UTF-16 の BOM (FF FE) があるとき
テスト
ソース
→ vbslib.vbs
→ T_Binary.vbs
本関数は、バージョンによって解析の性能が異なります。
現在のバージョンは、以下の方法で解析しています。
WHITE SQUARE エンコーディング判定法 （独自）
の encoding
XML宣言 (?xml)
Unicode の BOM (ByteOrderMaker)
Empty
解析できないとき、Windows の OEMのとき、ファイルがないとき
T_AnalyzeCharacterCodeSet
→ vbslib_helper.c
ReadCharacterEncodingCharacterCommand
← ▼ ▲
ReadUnicodeFileBOM
ファイルの文字コードを判定するために、ファイルの先頭にある BOM を読みます。
【引数】
Path
文字コードを判定するファイルのパス
Function ReadUnicodeFileBOM( Path as string ) as integer
返り値
BOM の文字コード
テスト
→ T_File.vbs
T_ReadUnicodeFileBOM
ソース
→ vbslib.vbs
返り値
ファイルが無いとき
Empty
c.UTF_8
c.Unicode
先頭に UTF-8 の BOM (EF BB BF) があるとき
先頭に UTF-16 の BOM (FF FE) があるとき
Set c = g_VBS_Lib です。
c.No_BOM
BOM がないとき
関連
→ AnalyzeCharacterCodeSet
← ▼ ▲
GetStringFromCharacterCodeSet
vbslib の文字コード セットの数値から、文字列に変換します。
【引数】
in_CharacterCodeSetConstant
vbslib の文字コード セットの数値
Function GetStringFromCharacterCodeSet(
in_CharacterCodeSetConstant as integer or string ) as string
返り値
文字コード セットの文字列
サンプル
Assert GetStringFromCharacterCodeSet( g_VBS_Lib.Shift_JIS ) = "Shift_JIS"
c.No_BOM
詳細
c.Shift_JIS
"Shift_JIS"
vbslib の
文字コード
セットの数値
文字コード
セットの文字列
c.EUC_JP
"EUC-JP"
c.Unicode
"Unicode"
仕様の理由
Shift_JIS は、
HTML
の、META タグの charset 属性に指定できる値です。
c.UTF_8
"UTF-8"
c.UTF_8_No_BOM
"UTF-8-No-BOM"
c.ISO_2022_JP
"ISO-2022-JP"
Empty
"Shift_JIS"
"Shift_JIS"
テスト
→ T_File.vbs
T_GetStringFromCharacterCodeSet
ソース
→ vbslib.vbs
→ GetCharacterCodeSetFromString
関連
← ▼ ▲
GetCharacterCodeSetFromString
文字コード セットの文字列から、vbslib の数値に変換します。
【引数】
in_CharacterCodeSetString
文字コード セットの文字列
Function GetCharacterCodeSetFromString(
in_CharacterCodeSetString as string ) as integr or string
返り値
vbslib の文字コード セットの数値
サンプル
Assert GetCharacterCodeSetFromString( "Shift_JIS", c.UTF_8_No_BOM ) = g_VBS_Lib.Shift_JIS
詳細
c.Shift_JIS
"Shift_JIS"
vbslib の
文字コード
セットの数値
文字コード
セットの文字列
c.EUC_JP
"EUC-JP"
c.Unicode
"Unicode"
"UTF-8"
c.UTF_8_No_BOM
"UTF-8-No-BOM"
c.ISO_2022_JP
"ISO-2022-JP"
c.Unicode
"UTF-16"
in_UTF_8_CharacterCodeSet
"UTF-8" に対する vbslib の文字コード セットの数値
in_UTF_8_CharacterCodeSet 引数の値、
c.UTF_8_No_BOM
または
c.UTF_8
c.UTF_8
"UTF-8-BOM"
その他
in_CharacterCodeSetString 引数
→ GetStringFromCharacterCodeSet
関連
ソース
→ vbslib.vbs
← ▼ ▲
ReadLineSeparator
ファイルの先頭行を読んで、改行文字の種類を返します。
【引数】
Path
改行文字の種類を判定するファイルのパス
Function ReadLineSeparator( Path as string ) as integer
返り値
vbCRLF または vbLF
関連
サンプル
f.LineSeparator = ReadLineSeparator( "File1.txt" )
(src)
→ new_TextFileLineSeparatorStack
テスト
→ T_File.vbs # [T_ReadLineSeparator]
ファイルによっては、改行文字の種類がバラバラになっていることもあります。
← ▼ ▲
GetLineCount
Set c = g_VBS_Lib
Assert GetLineCount( "a", Empty ) = 1
Assert GetLineCount( "a" +vbCRLF, Empty ) = 1
Assert GetLineCount( "a" +vbCRLF+ "b", Empty ) = 2
Assert GetLineCount( "a" +vbLF+ "b", Empty ) = 2
Assert GetLineCount( "", Empty ) = 0
Assert GetLineCount( "a", c.NoRound ) = 1
Assert GetLineCount( "a" +vbCRLF, c.NoRound ) = 1.5
Function GetLineCount( Text as string, RoundWay as integer )
文字列の行数をカウントします。
【引数】
Text
RoundWay
行数をカウントする文字列
通常 Empty、g_VBS_Lib.NoRound も可能
テスト
サンプル
ソース
T_GetLineCount
→ T_StrEx.vbs
→ ToolsLib.vbs
文字列の行数
返り値
RoundWay 引数
RoundWay 引数には、通常 Empty を指定します。
g_VBS_Lib.NoRound を指定すると、最終行の行末が改行文字なら +0.5 します。
（下記）
サンプル
line_num = GetLineCount( Left( string, position ), Empty )
position の位置の行番号を取得する
→ LineNumFromTextPositionClass
関連
行番号をカウントします
← ▼ ▲
LineNumFromTextPositionClass
文字列の先頭からの位置から、行番号をカウントします。
処理効率を良くするため、２回目以降は前回カウントした位置からカウントを再開します。
Set counter = new LineNumFromTextPositionClass
counter.Text = _
"a"+ vbCRLF + _
"b"+ vbCRLF + _
"cde"
Assert counter.GetNextLineNum( 4 ) = 2 '// "b"
Assert counter.GetNextLineNum( 6 ) = 2 '// vbLF
Assert counter.GetNextLineNum( 7 ) = 3 '// "c"
Assert counter.GetNextLineNum( 10 ) = 3 '// 最後の次
サンプル
Text
GetNextLineNum
→ ToolsLib.vbs
テスト
ソース
T_LineNumFromTextPosition
→ T_StrEx.vbs
← ▼ ▲
Text (LineNumFromTextPositionClass)
→ ReplaceTextAtHere
関連
現在位置以降の文字列を置き換える
Property LineNumFromTextPositionClass::Text as string '// Get/Let
行番号を調べる対象となる文字列。
設定すると、前回調べた位置と行番号の情報はクリアされます。 参考
→ GetNextLineNum
サンプル
→ LineNumFromTextPositionClass
← ▼ ▲
GetNextLineNum (LineNumFromTextPositionClass)
→ GetLineNum
関連
前回調べた位置より前にも対応した GetNextLineNum
Function LineNumFromTextPositionClass::GetNextLineNum( Position as integer ) as integer
文字列の先頭からの位置から、行番号をカウントします。
【引数】
Position
文字列の先頭からの位置、1 以上
Position 引数に指定した位置の行番号
返り値
Position 引数は、1 = 先頭の文字です。
前回調べた位置と行番号を Me の内部に格納しており、行番号を数える処理は、その続きから行うことで、
効率よく処理します。
前回 GetNextLineNum 関数に指定した値と同じか、それ以上の値を Position 引数に指定しなければ
エラーになります。
サンプル
→ LineNumFromTextPositionClass
← ▼ ▲
GetLineNum (LineNumFromTextPositionClass)
Function LineNumFromTextPositionClass::GetLineNum( Position as integer ) as integer
文字列の先頭からの位置から、行番号をカウントします。
【引数】
Position
文字列の先頭からの位置
Position 引数に指定した位置の行番号
返り値
との違いは、前回調べた位置より前の位置にも対応していることです。
GetNextLineNum
前回調べた位置より前の位置を Position 引数に指定したときは、文字列の先頭から数え直します。
← ▼ ▲
ReplaceTextAtHere (LineNumFromTextPositionClass)
Sub LineNumFromTextPositionClass::ReplaceTextAtHere( SecondHalfText as string )
行番号を調べる対象となる文字列のうち、前回調べた位置とそれ以降の部分文字列を置き換えます。
SetText
で置き換える場合と異なり、前回調べた位置と行番号の情報はクリアされません。
【引数】
SecondHalfText
前回調べた位置とそれ以降に設定する行番号を調べる文字列
Set counter = new LineNumFromTextPositionClass
counter.SetText _
"a"+ vbCRLF + _
"b"+ vbCRLF + _
"cde"
Assert counter.GetNextLineNum( 4 ) = 2 '// "b"
counter.ReplaceTextAtHere _
"XY"+ vbCRLF + _
"c"
Assert counter.GetNextLineNum( 8 ) = 3 '// "c"
サンプル
ReplaceTextAtHere
a
b
cde
a
XY
c
行番号を調べる対象となる文字列は、次のように置き換わります。
← ▼ ▲
Position (LineNumFromTextPositionClass)
Property LineNumFromTextPositionClass::Position as integer '// Get only
前回調べた文字列の位置。
← ▼ ▲
LineNum (LineNumFromTextPositionClass)
Property LineNumFromTextPositionClass::LineNum as integer '// Get only
前回調べた行番号。
← ▼ ▲
ReadVBS_Comment
テスト
Function ReadVBS_Comment( Path as string, StartTag as string, EndTag as string, Opt as Empty )
VBScript のファイルの中のコメントを、複数行の文字列として読み込みます。
【引数】
Path
StartTag
VBScript ファイルのパス、# 可能、Empty =
VBScript ファイルの中の、読み込みを開始する1つ上の行にあるキーワード
EndTag
Opt
返り値
読み込む最後の行の1つ下の行にあるキーワード
Empty を指定してください
読み込んだ文字列。 先頭に ' は付きません
サンプル
text = ReadVBS_Comment( Empty, "["+"FileA.txt]", "[/"+"FileA.txt]", Empty )
'-------------------------------------------------------------------[FileA.txt]
'((( これはテキストファイルの代わりです )))
'
'END
'------------------------------------------------------------------[/FileA.txt]
スクリプト
text に入った値
((( これはテキストファイルの代わりです )))
END
最後の行の末尾には改行があります
→ T_FileInScript.vbs
T_ReadVBS_Comment
StartTag と EndTag に指定したキーワードがヒットしないよう、下記のサンプルにあるように + でつなぐ
などの対策をしてください。
ソース
→ vbslib.vbs
WScript.ScriptFullName
→ new_FilePathForFileInScript
関連
Path に、URL のように # を付けると、StartTag と EndTag の一部になります。
下記の２つは同じ動きをします。 StartTag と EndTag に指定した引数は無視されます。
text = ReadVBS_Comment( "#FileA.txt", Empty, Empty, Empty )
text = ReadVBS_Comment( Empty, "["+"FileA.txt]", "[/"+"FileA.txt]", Empty )
→ WriteVBS_Comment
XML をリードするには、次のようにします。
text = ReadVBS_Comment( Empty, "["+"A.xml]", "[/"+"A.xml]", Empty )
Set root = LoadXML( text, g_VBS_Lib.StringData )
echo root.tagName
'-------------------------------------------------------------------[A.xml]
'<Root>
'
'</Root>
'------------------------------------------------------------------[/A.xml]
← ▼ ▲
OpenForWrite
Function OpenForWrite( Path as string, Flags as integer ) as TextStream
テキストファイルを開きます。（ライト用＝ファイルへ出力します）
【引数】
Path
返り値
開くファイルのパス
ファイルのストリーム
と異なり、エラーがあったら、エラーメッセージに Path が付きます。
FileSystemObject::OpenTextFile
Set w_= AppKey.NewWritable( "." ).Enable()
Set file = OpenForWrite( "a.txt", Empty )
file.WriteLine "abc"
file = Empty
サンプル
→ FileSystemObject::CreateTextFile
c.Unicode
Flags 引数
Empty または 次の値
Unicode 形式ファイルにします。 指定しないときは、
new_TextFileCharSetStack で指定した既定の文字コードになります。
(src)
Flags
Empty、またはオプション（下記）
c.Append
追記します。
Shift-JIS, Unicode, UTF-8(BOMあり) のときは、文字コードを指定しなくても、
元のファイルと同じ文字コードになります。
→ ReplaceTextFile
関連
→ StringStream クラス
→ ファイル名、パス
→ バイナリ混在テキスト生成 (txt2bintxt.exe)
→ T_File.vbs [T_OpenForWrite]
テスト
a.txt
new_TextFileCharSetStack
を使うと、その他のフォーマットも指定できます。
NewWritable
次の値と論理和をとることもできます。
文字コードの指定は、次のどれかが指定できます。
c.Shift_JIS
c.UTF_8
c.EUC_JP
BOM 付き UTF-8
Shift-JIS
EUC(JP)
BOM なし UTF-8
c.UTF_8_No_BOM
→ CreateFile
下記の c は g_VBS_Lib です。
→ g_VBS_Lib
NewWritable
メソッドを使って、Out of Writable 警告が出ないようにしておいてください。
改行コードの指定は、
を使ってください。
new_TextFileLineSeparatorStack
返り値を使って呼び出せるメソッドは、FileSystemObject::OpenTextFile と同じです。
→ T_File.vbs [T_OpenForWrite_Overwrite]
StartReplace
テキストファイルの内容を書き換えるときは、文字コード（Unicode ファイルのBOM）や改行文字を
を使ってください。
継承する
→ TextStream （VBScript）
→ LockByFileMutex
← ▼ ▲
new_TextFileCharSetStack
Set cs = new_TextFileCharSetStack( "UTF-8" )
CreateFile "File1.txt", "abc"
サンプル
"UTF-8"
ファイルの文字 コード セットを指定します。
【引数】
CharSet
ファイルの文字 コード セット, Empty=デフォルト
デフォルト（本関数を一度も呼ばなかったとき）は、"Shift_JIS" です。
CharSet 引数に指定する文字列の大文字小文字は区別しません。
c.Unicode などの数値定数を指定することもできます。
Function new_TextFileCharSetStack( CharSet as string ) as TextFileCharSetStack
→ OpenForWrite
関連
テスト
→ T_File.vbs [T_OpenForWrite]
(src)
新規作成するときの出力ファイルや、ファイルから読み込むときの文字コードを指定
します。 返り値のオブジェクトが削除されたら、指定は無効になります。
"UTF-8" は、ファイルの先頭に
BOM
が付きます。 "UTF-8-No-BOM" は付きません。
→ Charset (ADODB.Stream)
指定できる値は、レジストリの HKEY_CLASSES_ROOT\MIME\Database\Charset の
サブキーを参照してください。 ただし、"UTF-8-No-BOM" はサブキーにありません。
CharSetの例：
"Shift_JIS", "EUC-JP", "Unicode", "UTF-8", "UTF-8-No-BOM",
"ISO-8859-1", "ISO-2022-JP"
c.Shift_JIS, c.EUC_JP, c.Unicode, c.UTF_8, c.UTF_8_No_BOM,
c.ISO_2022_JP, c.No_BOM(=c.Shift_JIS), Empty(=c.Shift_JIS)
→ CreateFile
BOM を付けないときは XML の encoding や HTML の charset などを用いて文字
コードを記述しなければ、多くのプログラムは文字化けを起こします。 一方で、
BOM があるとエラーを起こす UTF-8 に対応していないプログラムも多くあります。
→ XmlWriteEncoding
→ ReadUnicodeFileBOM
ファイル内の文字コードの指定
<?xml version="1.0" encoding="UTF-8"?>
XML の場合
<META http-equiv="content-type" content="text/html; charset=UTF-8"/>
HTML の場合
UTF-8
UTF-8
ファイルの先頭にある BOM を読みます。
XML ファイルの文字コードを指定します。
→ ConvertCharCodeInHref
→ Text (BinaryArray)
文字コードセットを変換します。
→ Charset (ADODB.Stream)
vbslib では、解析を行いません。
→ Read_XML_Encoding
現在指定されている文字 コード セットは、
g_FileOptions
で取得できます。
← ▼ ▲
Decode_MIME_HeaderLine
Function Decode_MIME_HeaderLine( Line as string ) as string
str = Decode_MIME_HeaderLine( "Subject: =?ISO-2022-JP?B?YWJjGyRCJUYlOSVIGyhCZGVm?=" )
Assert str = "Subject: abcテストdef"
MIME ヘッダーの１行を "=? … ?=" 形式から、通常の文字列に戻します。
【引数】
Line
MIME ヘッダーの１行
Line からでコードした通常の文字列
返り値
テスト
サンプル
ソース
T_MIME
参考
→ MIME
→ ISO-2022-JP
→ Base64
関連
→ Base64 (BinaryArray)
→ T_Binary.vbs
→ Text (BinaryArray)
→ System.vbs
文字コードの変換
← ▼ ▲
new_TextFileLineSeparatorStack
(src)
ファイルの改行文字コードを指定します。
【引数】
LS
ファイルの改行文字コード、または Empty
Function new_TextFileLineSeparatorStack( LS as string ) as TextFileLineSeparatorStack
返り値のオブジェクトが削除されたら、指定は無効になります。
LS 引数
vbCRLF, g_VBS_Lib.CRLF
vbLF, g_VBS_Lib.LF
g_VBS_Lib.KeepLineSeparators
Empty
リードするときは改行文字を自動判定、ライトするときは CR+LF、修正するとき（*下記）は
改行文字の種類を継承します。
CR+LF
LF
改行文字の種類を継承する（下記）
Dim ls : Set ls = new_TextFileLineSeparatorStack( g_VBS_Lib.KeepLineSeparators )
Set f = OpenForRead( Path )
ls = Empty
text = f.ReadLine()
サンプル
参考
→ LineSeparator (ADODB.Stream)
OpenForReplace
など、修正前のテキストと修正後のテキストの両方を指定する vbslib
「改行文字の種類を継承する」 とは、入力ファイルに書かれた改行文字の種類が、１行
単位で、そのまま出力ファイルに書かれることです。 １つのファイルに複数の改行文字の
種類が混ざっていても、そのまま継承されることです。
改行文字の種類を継承するときの動き (KeepLineSeparators)
TextStream::WriteLine に渡すテキストの末尾に vbCRLF または vbLF を付けることが
できます。 付けたときは、その種類の改行文字が出力され、TextStream::WriteLine に
よって自動的に改行文字を付けることはなくなります。 また、デフォルトの改行文字も
指定した種類に変更されます。 改行文字を付けなかったときは、デフォルトの改行
文字が自動的に付きます。 つまり、TextStream::ReadLine で入力した１行をそのまま
TextStream::WriteLine に出力すると、改行文字の種類は継承され、末尾に改行文字
を付けない新たな１行を TextStream::WriteLine に出力すると、前の行の改行文字の
種類を継承します。
自動判定 （下記）
LS 引数 = Empty のときの動き
の関数を使ったときは、その関数の中で改行文字の種類の継承処理が行われます。
ReadLineSeparator
を使って、入力ファイルの先頭行の改行文字の種類を
判定して、出力ファイルのデフォルト改行文字の種類を設定します。
入力ファイル、出力ファイル、ともに、g_VBS_Lib.KeepLineSeparators （上記） のモード
を使うように、new_TextFileLineSeparatorStack を呼び出します。
TextStream::ReadLine の返り値である１行のテキストの末尾に改行文字が加わります。
改行文字は、ファイルの内容によって、LF または CR+LF のどちらかになります。
ただし、最終行の末尾に改行文字が無いときだけ、改行文字は加わりません。
はじめに、
→ CutCRLF
関連
そうではなく、OpenForRead などを使ってテキストをリードして、OpenForWrite などを
使ってテキストをライトする処理をプログラミングするときは、以下で説明する詳細な
手順を参考に、改行文字の継承を行ってください。
KeepLineSeparators モードでは、TextStream::ReadLine や TextStream::WriteLine に
よってアクセスする１行のテキストの内容が、次のように変わります。
テスト
→ T_Replace.vbs # T_StartReplace_KeepRet_1
→ T_File.vbs # T_OpenFile_LineSepFromFS
TextStream::WriteLineDefault を使うと、渡したテキストの改行文字を、デフォルトの
改行文字に置き換え、渡したテキストの最後に改行文字を追加して、出力します。
←
↓