1. ホーム
  2. スクリプト・コラム
  3. vbs

VBSの基本 - vbscript TextStreamオブジェクト

2022-02-07 02:13:26

TextStreamオブジェクトは、テキストファイルにアクセスするためのオブジェクトで、FileSystemObjectの独立した補助オブジェクトですが、TextStreamオブジェクトを使う場合でも、FileSystemObjectオブジェクトまたはその補助オブジェクトの助けを借りて、TextStreamオブジェクトを作り、ディスクファイルの内容にアクセスしなければなりません。TextStreamのオブジェクトハンドルは、FileSystemObjectオブジェクトのCreateTextFile()とOpenTextFile()を使って取得することができます。

TextStreamオブジェクトのメソッドとプロパティを詳しく見てみましょう。

TextStream オブジェクトのメソッド

<テーブル メソッド 説明 閉じる() 開いているファイルを閉じる 読み込み(numchars) ファイルからnumchars文字を読み込む リードオール(ReadAll) ファイル全体を1つの文字列として読み込む リードライン() ファイルから1行を文字列として読み込む(キャリッジリターン、ラインフィードまで)。 スキップ(numchars) ファイルから読み込む際、numchars 文字を無視する SkipLine() ファイルから読み込むとき、次の行を無視する 書き込み(文字列) 文字列をファイルに書き込む string WriteLine(文字列) 文字列(オプション)と改行をファイルに書き込む WriteBlankLines(n) 改行数nをファイルに書き込む

Close、Write、WriteLine、WriteBlankLinesの使用について

メソッド名:Close()

説明 開いているファイルを閉じます

メソッド名:WriteLine(string)

説明 文字列string(オプション)と改行をファイルに書き込みます。

Dim strPath,strText
strPath = "C:\testing.txt"
strText = "This is Test !hello word ! "
'Call the function
Call CreateFile(strPath,strText)
 
Sub CreateFile(strPath,strText)
  Dim objFso,objStream
  'Create FileSystemObject object
  Set objFso = CreateObject("Scripting.FileSystemObject")
  'Use CreateTextFile(), to return a TextStream object handle
  Set objStream = objFso.CreateTextFile(strPath,True)
  'Three Write means: write characters in the text, write characters with line breaks, write 3 line breaks
  objStream.Write(strText)
  objStream.WriteLine(strText)
  objStream.WriteBlankLines 3
  'Close the TextStream object
  objStream.Close
End Sub

Read、ReadAll、ReadLineの使用について

メソッド名 Read(numchars)

説明 TextStreamファイルから指定された文字数を読み込んで、結果の文字列を返します。

メソッド名 メソッド名: ReadAll()

説明 TextStreamファイル全体を読み込み、結果の文字列を返します。

メソッド名 メソッド名: ReadLine()

説明 TextStream ファイルから文字列全体を読み込み(次の行の文字まで)、その文字列を返します。

Call CreateFile("c:\test.txt", "This is Test ! " & vbCrLf & "hello word ! ")
 
Sub CreateFile(strPath,strText)
  Dim objFso,objStream
  'Create FileSystemObject object
  Set objFso = CreateObject("Scripting.FileSystemObject")
  'Use the FileSystemObject object CreateTextFile(), to return a TextStream object handle
  Set objStream = objFso.CreateTextFile(strPath,True)
  'Write characters
  objStream.WriteLine(strText)
  'Read string are: read the whole line, read all, read a specified number of characters
  Msgbox (objStream.ReadLine)
  Set objStream = objFso.OpenTextFile(strPath,1,true)
  Msgbox (objStream.ReadAll)
  Set objStream = objFso.OpenTextFile(strPath,1,true)
  Msgbox (objStream.Read(9))
  'Close the TextStream object
  objStream.Close
End Sub

スキップ、SkipLineの使用について

メソッド名:Skip(numchars)

説明 TextStream ファイルを読み込む際に、指定された文字数をスキップする。

メソッド名:SkipLine()

説明 TextStream ファイルを読むとき、次の行をスキップします。

Dim strPath,strText
strPath = "C:\test.txt"
'Call the function
Call CreateFile(strPath)
 
Sub CreateFile(strPath)
  Dim objFso,objStream
  'Create FileSystemObject object
  Set objFso = CreateObject ("Scripting.FileSystemObject")
  'Use the FileSystemObject object CreateTextFile (), to return a TextStream object handle
  Set objStream = objFso.CreateTextFile(strPath,True)
  'Write characters in the text
  objStream.Write "This is Test ! " & vbCrLf & "hello word ! "
  'Open the file as read-only
  Set objStream = objFso.OpenTextFile(strPath,1,true)
  'Skip 5 characters when reading the file; or skip the current line and read the next line
  objStream.Skip(5)
  Msgbox objStream.ReadAll
  Set objStream = objFso.OpenTextFile(strPath,1,true)
  'Skip the first line
  objStream.SkipLine
  Msgbox objStream.ReadAll
  'Close the TextStream object
  objStream.Close
End Sub

 TextStream オブジェクトのプロパティ

<テーブル

属性

説明

AtEndOfLine

ファイル位置ポインタがファイルの行末にあるとき、True を返します。

AtEndOfStream

ファイルロケーションポインタがファイルの終端にある場合、True を返します。

コラム

ファイル中の現在の文字の列番号を 1 から順に返します。

ライン

ファイル内の現在行の行番号を1"から順に返します。

AtEndOfLineとAtEndOfStreamの使い分け

両者の違いは

AtEndOfLine - テキストを現在の行の終わりまで読みます。

AtEndOfStream - テキスト全体の終わりまで読みます。

Dim strPath,strText
strPath = "C:\test.txt"
'Call the function
Call CreateFile(strPath)
 
Sub CreateFile(strPath)
  Dim objFso,objStream,str
  'Create FileSystemObject object
  Set objFso = CreateObject ("Scripting.FileSystemObject")
  'Open the file as read-only, or create it if it does not exist
  Set objStream = objFso.OpenTextFile(strPath,1,true)
  'If the current pointer is not at the end of the line, then read the text content
  Do While objStream.AtEndOfLine <> true
    str = str + objStream.Read(1)
  Loop
  msgbox str
  str = ""
  Set objStream = objFso.OpenTextFile(strPath,1,true)
  'If the current pointer is not at the end of the text, then read the text content
  Do While objStream.AtEndOfStream <> true
    str = str + objStream.Read(1)
  Loop
  MsgBox str
  'Close the TextStream object
  objStream.Close
End Sub

列と行の使用

Call TestTextStream("c:\test.txt")
 
Sub TestTextStream(strPath)
  Dim objFso,objTStream,str
  Set objFso = CreateObject("Scripting.FileSystemObject")
  'Open the file as read-only
  Set objTStream = objFso.OpenTextFile(strPath,1)
  'If the current pointer is not at the end of the entire document, read all the contents of the text
  Do While objTStream.AtEndOfStream <> true
    objTStream.ReadAll
    str = str + "Total" & objTStream.Line & "Line data, the last column number where the cursor is: " & objTStream.Column & vbCrLf
  Loop
  'Print message
  MsgBox str
End Sub  

テキストの読み上げ例です。

  テキストから最終行のデータを読み取るにはどうすればよいですか?  

Dim Fso,MyFile
Dim strLine
'Create FileSystemObject object
Set Fso = CreateObject("Scripting.FileSystemObject")
'Open the file as read-only
Set MyFile = Fso.OpenTextFile("C:\test.txt",1)
'Until you reach the end of the file
Do Until MyFile.AtEndOfStream
  'Read the entire current line of data
  strLine = MyFile.
Loop
MyFile.Close
MsgBox strLine

最終行のテキスト(ファイル末尾に空白行がある)を読むにはどうしたらよいですか?  

Dim Fso,MyFile
Dim strLine
'Create FileSystemObject object
Set Fso = CreateObject("Scripting.FileSystemObject")
'Open the file as read-only
Set MyFile = Fso.OpenTextFile("C:\test.txt",1)
Do Until MyFile.AtEndOfStream
  'Read the current whole line of string
  strNextLine = MyFile.ReadLine
  'Determine if the whole line read is a blank string
  If Len(strNextLine) > 0 Then
    'If it is not blank, then assign a value
    strLine = strNextLine
  End If
Loop
MyFile.Close
MsgBox strLine

指定した行の内容を読み取る 

MsgBox TestTextStream("c:\test.txt",1)
 
Function TestTextStream(strPath,IntLine)
  Dim Fso,MyFile
  Set Fso = CreateObject("Scripting.FileSystemObject")
  'Open the file as read-only
  Set MyFile = Fso.OpenTextFile(strPath,1)
  'If the current pointer is not at the end of the entire document, read the entire line of text
  Do Until MyFile.AtEndOfStream
    TestTextStream = MyFile.
    IntLine = IntLine - 1
    'determine whether the cursor has reached the specified line, to exit the function
    If IntLine = 0 Then
      Exit Function
    End If
  Loop
End Function

以上で、この記事を必要とする方々のために、この記事を終わります。