TextStream Methods and Properties of 'Scripting.FileSystemObject'


TextStream Methods and Properties of 'Scripting.FileSystemObject'.WBT
Version 1.02  2002:08:25

The following WinBatch script describes and makes use of the
OLE object 'Scripting.FileSystemObject'
as described in the Microsoft Platform SDK, May 2002 Edition.


If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com


;================================================================================================================================
; Short Overview: TextStream Methods and Properties of "Scripting.FileSystemObject"                        Detlev Dalitz.20020706
;================================================================================================================================
; The TextStream Object
; Facilitates sequential access to file.
; TextStream.{property  | method( )}
;================================================================================================================================


;--------------------------------------------------------------------------------------------------------------------------------
; OpenTextFile
; Opens a specified file and returns a TextStream object that can be used to read from, write to, or append to the file.
; object.OpenTextFile(filename[, iomode[, create[, format]]])
;--------------------------------------------------------------------------------------------------------------------------------
; iomode
; Optional. Can be one of three constants: ForReading, ForWriting, or ForAppending.
ForReading      = 1     ; Open a file for reading only. You can't write to this file.
ForWriting      = 2     ; Open a file for writing.
ForAppending    = 8     ; Open a file and write to the end of the file.
;--------------------------------------------------------------------------------------------------------------------------------
; create
; Optional. Boolean value that indicates whether a new file can be created if the specified filename doesn't exist.
; If omitted, a new file isn't created.
Create          = @TRUE ; The value is True if a new file is created
                        ; The value is False if it isn't created.

iOpenCreate     = @TRUE
iOpenNoCreate   = @FALSE
;--------------------------------------------------------------------------------------------------------------------------------
; format
; Optional. One of three Tristate values used to indicate the format of the opened file.
; If omitted, the file is opened as ASCII.
TristateUseDefault = -2 ; Opens the file using the system default.
TristateTrue       = -1 ; Opens the file as Unicode.
TristateFalse      =  0 ; Opens the file as ASCII.

iOpenDefault       = -2 ; Opens the file using the system default.
iOpenUnicode       = -1 ; Opens the file as Unicode.
iOpenAscii         =  0 ; Opens the file as ASCII.
;--------------------------------------------------------------------------------------------------------------------------------


;--------------------------------------------------------------------------------------------------------------------------------
; CreateTextFile
; Creates a specified file name and returns a TextStream object that can be used to read from or write to the file.
; object.CreateTextFile(filename[, overwrite[, unicode]])
;--------------------------------------------------------------------------------------------------------------------------------
; overwrite
; Optional. Boolean value that indicates whether you can overwrite an existing file.
; If omitted, existing files are not overwritten.
Overwrite       = @TRUE  ; The value is true if the file can be overwritten.
                         ; The value is false if it can't be overwritten.

iCreateOverwrite   = @TRUE
iCreateNoOverwrite = @FALSE
;--------------------------------------------------------------------------------------------------------------------------------
; unicode
; Optional. Boolean value that indicates whether the file is created as a Unicode or ASCII file.
; If omitted, an ASCII file is assumed.
Unicode         = @TRUE  ; The value is true if the file is created as a Unicode file.
                         ; The value is false if it's created as an ASCII file.

iCreateUnicode  = @TRUE
iCreateAscii    = @FALSE
;--------------------------------------------------------------------------------------------------------------------------------



;--------------------------------------------------------------------------------------------------------------------------------
; object = ObjectOpen("Scripting.FileSystemObject") ; WIL syntax
; ObjectClose(object)                               ; WIL syntax
;
; TextStream = object.CreateTextFile(filename[, overwrite[, unicode]])      ; Creates a file as a TextStream
; TextStream = object.OpenTextFile(filename[, iomode[, create[, format]]])  ; Opens a file as a TextStream
;
; TextStream.Close                       ; Close a text stream.
;
; TextStream.ReadAll                     ; Read the entire stream into a string.
; TextStream.ReadLine                    ; Read an entire line into a string.
; TextStream.Read (n)                    ; Read a specific number of characters into a string.
;
; TextStream.Write (string)              ; Write a string to the stream.
; TextStream.WriteLine                   ; Write an end of line to the stream.
; TextStream.WriteLine (string)          ; Write a string and an end of line to the stream.
; TextStream.WriteBlankLines (n)         ; Write a number of blank lines to the stream.
;
; TextStream.SkipLine                    ; Skip a line.
; TextStream.Skip (n)                    ; Skip a specific number of characters.
;
; TextStream.Line                        ; Current line number.
; TextStream.Column                      ; Current column number.
;
; TextStream.AtEndOfLine                 ; Boolean Value. Is the current position at the end of a line?
; TextStream.AtEndOfStream               ; Boolean Value. Is the current position at the end of the stream?
;--------------------------------------------------------------------------------------------------------------------------------



;--------------------------------------------------------------------------------------------------------------------------------
sWILVersionRequired = "3.6dcf"
sWILVersion = VersionDLL()
If (sWILVersion<sWILVersionRequired)
sMsgTitle = StrCat("WIL Interpreter Version ",sWILVersion)
sMsgText  = StrCat("Script requires Version ",sWILVersionRequired,@LF,"Otherwise some OLE operations may do not work properly.")
Pause(sMsgTitle,sMsgText)
EndIf
;--------------------------------------------------------------------------------------------------------------------------------
oFS = ObjectOpen("Scripting.FileSystemObject")
;--------------------------------------------------------------------------------------------------------------------------------
:test1
; Create a textfile and write some lines.
sFilenameTest = "d:\temp\test.ascii.txt"
oMyFile = oFS.CreateTextFile(sFilenameTest, iCreateOverwrite)   ; Create a file as a TextStream
oMyFile.WriteLine("This is a test. Line 1.")            ; Write a string and an end of line to the stream.
oMyFile.WriteBlankLines(2)                              ; Write a number of blank lines to the stream.
oMyFile.WriteLine("This is a test. Line 4.")            ; Write a string and an end of line to the stream.
oMyFile.Write("This is a test. Line 5.")                ; Write a string to the stream.
oMyFile.Write("This is a test. Line 5.")                ; Write a string to the stream.
oMyFile.Write("This is a test. Line 5.")                ; Write a string to the stream.
oMyFile.WriteLine                                       ; Write an end of line to the stream.
oMyFile.WriteLine("This is a test. Line 6.")            ; Write a string and an end of line to the stream.
oMyFile.Close                                           ; Close a text stream.
ObjectClose(oMyFile)
;--------------------------------------------------------------------------------------------------------------------------------
:test2
; Read lines, skip lines, skip chars, read chars.
sFilenameTest = "d:\temp\test.ascii.txt"
oMyFile = oFS.OpenTextFile(sFilenameTest, ForReading)   ; Open a file as a TextStream
sReadLineTextFile = oMyFile.ReadLine                    ; line 1  ; Read an entire line into a string.
oMyFile.SkipLine                                        ; line 2  ; Skip a line.
oMyFile.SkipLine                                        ; line 3  ; Skip a line.
sReadLineTextFile = oMyFile.ReadLine                    ; line 4  ; Read an entire line into a string.
oMyFile.Skip(6)                                         ; line 5 skip 6 chars ; Skip a specific number of characters.
sReadSomeChars    = oMyFile.Read(10)                    ; line 5 read 10 chars from line 5.
sReadLineTextFile = oMyFile.ReadLine                    ; line 5 read the rest of the line.
sReadLineTextFile = oMyFile.ReadLine                    ; line 6  ; Read an entire line into a string.
oMyFile.Close                                           ; Close a text stream.
ObjectClose(oMyFile)
;--------------------------------------------------------------------------------------------------------------------------------
:test3
; Read entire file at once, count lines.
sFilenameTest = "d:\temp\test.ascii.txt"
oMyFile = oFS.OpenTextFile(sFilenameTest, ForReading)   ; Open a file as a TextStream
sReadAllTextFile = oMyFile.ReadAll                      ; Read the entire stream into a string.
iLineCount       = oMyFile.Line                         ; Current line number.
; Note:
; If oMyFile ends without a @crlf sequence, then iLineCount contains the actual last line number.
; If oMyFile ends with a @crlf sequence, then iLineCount contains a number of actual lines plus 1.
oMyFile.Close                                           ; Close a text stream.
ObjectClose(oMyFile)
;--------------------------------------------------------------------------------------------------------------------------------
:test4
; Read single chars from a line, count chars.
sFilenameTest = "d:\temp\test.ascii.txt"
oMyFile = oFS.OpenTextFile(sFilenameTest, ForReading)   ; Open a file as a TextStream
sLineThis = ""
While !oMyFile.AtEndOfLine                              ; Is the current position at the end of a line?
   iColumnThis = oMyFile.Column                         ; Current column number.
   sLineThis   = StrCat(sLineThis, oMyFile.Read(1))     ; Read a specific number of characters into a string.
   iColumnNext = oMyFile.Column                         ; Current column number.
EndWhile
oMyFile.Close                                           ; Close a text stream.
ObjectClose(oMyFile)
; Note:
; After reading the last char in line with oMyFile.Read(n)
; then oMyFile.Column points to one char beyond the actual end of text (n+1).
; Therefore the end of line has to be detected explicitely by oMyFile.AtEndOfLine.
;--------------------------------------------------------------------------------------------------------------------------------
:test5
; Read lines, count lines.
sFilenameTest = "d:\temp\test.ascii.txt"
oMyFile = oFS.OpenTextFile(sFilenameTest, ForReading)   ; Open a file as a TextStream
While !oMyFile.AtEndOfStream                            ; Is the current position at the end of the stream?
   iLineThis = oMyFile.Line                             ; Current line number.
   sLineThis = oMyFile.ReadLine                         ; Read an entire line into a string.
   iLineNext = oMyFile.Line                             ; Current line number.
EndWhile
oMyFile.Close                                           ; Close a text stream.
ObjectClose(oMyFile)
; Note:
; After reading one line then oMyFile.Line points to the next line number.
; If the file ends without a @crlf sequence, then oMyFile.Line contains the actually last line number.
; If the file ends with a @crlf sequence, then oMyFile.Line points to the last line plus one.
; Therefore the end of file has to be detected explicitely by oMyFile.AtEndOfLine.
;--------------------------------------------------------------------------------------------------------------------------------
:test6
; Read ascii file, write unicode file, convert without explicitely buffering .
sFilenameAscii     = "d:\temp\test.ascii.txt"
sFilenameUnicode   = "d:\temp\test.unicode.bin"

oMyFileAscii   = oFS.OpenTextFile(sFilenameAscii, ForReading, iOpenNoCreate, iOpenAscii)
oMyFileUnicode = oFS.CreateTextFile(sFilenameUnicode, iCreateOverwrite, iCreateUnicode)

oMyFileUnicode.Write(oMyFileAscii.ReadAll)

oMyFileAscii.Close
oMyFileUnicode.Close

ObjectClose(oMyFileAscii)
ObjectClose(oMyFileUnicode)

Run(StrCat(DirHome(),"browser.exe"),sFilenameAscii)
Run(StrCat(DirHome(),"browser.exe"),sFilenameUnicode)
;--------------------------------------------------------------------------------------------------------------------------------
:test7
; Read a number of chars from unicode text stream, count chars.
sFilenameTest = "d:\temp\test.unicode.bin"
oMyFile = oFS.OpenTextFile(sFilenameTest, ForReading, iOpenNoCreate, iOpenUnicode)  ; Read Unicode ; Open a file as a TextStream
oMyFile.Skip(80)                                       ; Skip first 80 chars ; Skip a specific number of characters.
sThisStream = oMyFile.Read(1000)                       ; Read 1000 chars ; Read a specific number of characters into a string.
iCharCount = StrCharCount(sThisStream)                 ; How many chars actually read?
oMyFile.Close                                          ; Close a text stream.
ObjectClose(oMyFile)
;--------------------------------------------------------------------------------------------------------------------------------
ObjectClose(oFS)
Exit
;================================================================================================================================