Chris D. Hix
Chris D. Hix

Reputation: 9

Msgbox input in vbscript saved/apended to text file

I have had some basic programming but never had to save any input to a text file. If any one can please help me i would appreciate it.

I have gotten the script to run in a web page and it works, but now i need to save the information to a text file. The format i would like it shown at the end of the code in comments.

Thanks

<script type="text/vbscript">
<!--
Option Explicit

DIM newbook, title, author, startpage, stoppage, timeread, dateread
DIM pagesread, pagesperminute

'input
newbook = inputbox("Is this the first time reading this book? y -or- n")

'decision
if newbook = "y" then
        title = inputbox("What is the book title?")
        author = inputbox("Who wrote the book?")
        startpage = 1 
else
        title = "******"
        author = "******"
        startpage = inputbox("What page did you start reading on")
end if

'input
stoppage = inputbox("What page did you stop reading on?")
timeread = inputbox("How long did you read?")
dateread = inputbox("What was the date you read on? MM/DD")

'calculation
pagesread = stoppage - startpage
pagesperminute = pagesread / timeread

'output
document.write "Date Read: " &(dateread)
document.write "<br>Book Title: " &(title)
document.write "<br>Author: " &(author)
document.write "<br>Pages Read: " &(startpage)
document.write " - " &(stoppage)
document.write "<br>Time Read: " &(timeread)
document.write "<br>Pages Read Per Minute: " &(pagesperminute)



'output to text log

Researching further I came up with this, it creates the file or appends additional data to the file almost like I want. The only thing I want to change is the following: filetxt.WriteLine ("Pages Read: ") &startpage filetxt.WriteLine (" - ") &stoppage These I would rather format to the same line similar to: filetxt.WriteLine ("Pages Read: ") &startpage (" - ") &stoppage Resulting in: Pages Read: 1 – 22 Currently I cannot figure out how to accomplish this without getting errors.

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set filesys = CreateObject("Scripting.FileSystemObject") 
Set filetxt = filesys.OpenTextFile("readlog.txt", ForAppending, True)
path = filesys.GetAbsolutePathName("C:\readlog\readlog.txt")
getname = filesys.GetFileName(path)

filetxt.WriteLine ("")
filetxt.WriteLine ("Date Read: ") &dateread
filetxt.WriteLine ("Book Title: ") &title
filetxt.WriteLine ("Author: ") &author
filetxt.WriteLine ("Pages Read: ") &startpage 
filetxt.WriteLine (" - ") &stoppage
filetxt.WriteLine ("Time Read: ") &timeread
filetxt.WriteLine ("Pages Read Per Minute: ") &pagesperminute



' -->
</script>

Upvotes: 0

Views: 2254

Answers (1)

Nathan Rice
Nathan Rice

Reputation: 3111

Here is a function I wrote to log to a text file, you might find it useful:

http://www.naterice.com/blog/template_permalink.asp?id=43

'---------LogToFile Configuration---------
'NOTE: Copy the configuration section To
'the beginning of an existing script. The
'values specified here must be set before
'calling the LogToFile sub.

'You can disable logging globally by
'setting the bEnableLogging option to false.
bEnableLogging = True

'Setting this to true will time stamp Each
'message that is logged to the log file
'with the current date and time.
bIncludeDateStamp = True

'This will set the log file name to the
'current date and time. You can use this
'option to create incremental log files.
bPrependDateStampInLogFileName = False

'Specify the log file location here. Path
'must contain a trailing backslash. If you
'would like to log to the same location as
'the currently running script, set this
'value to "relative" or uncomment out the
'line below.
'sLogFileLocation = "C:\LogFiles\"
sLogFileLocation = "relative"

'Specify the log file name here.
sLogFileName = "logtofiletest.txt"

'You can set whether or not you would like
'the script to append to an existing file,
'or if you would like it to overwrite
'existing copies. To overwrite set the
'sOverWriteORAppend variable to "overwrite"
sOverWriteORAppend = "append"

'Here you can set the maximum number of
'lines you like to record. If the maximum
'is reached the beginning of the log file
'will be pruned. Setting this to a value
'of 0 will disable this function.
vLogMaximumLines = 0

'This is just like limiting the log file
'to a number of lines but limits by the
'total size of the log file. This value
'is in bytes. Setting this to 0 will
'disable this function.
vLogMaximumSize = 0
'-------END LogToFile Configuration-------

Sub LogToFile(Message)
    'LogToFile.vbs 10-18-07
    'This script is provided under the Creative Commons license located
    'at http://creativecommons.org/licenses/by-nc/2.5/ . It may not
    'be used for commercial purposes with out the expressed written consent
    'of NateRice.com

    If bEnableLogging = False Then Exit Sub

    Const ForReading = 1
    Const ForWriting = 2
    Const ForAppending = 8

    Set oLogFSO = CreateObject("Scripting.FileSystemObject")

    If sLogFileLocation = "relative" Then
        Set oLogShell = CreateObject("Wscript.Shell")
        sLogFileLocation = oLogShell.CurrentDirectory & "\"
        Set oLogShell = Nothing
    End If

    If bPrependDateStampInLogFileName Then
        sNow = Replace(Replace(Now(),"/","-"),":",".")
        sLogFileName = sNow & " - " & sLogFileName
        bPrependDateStampInLogFileName = False       
    End If

    sLogFile = sLogFileLocation & sLogFileName

    If sOverWriteORAppend = "overwrite" Then
        Set oLogFile = oLogFSO.OpenTextFile(sLogFile, ForWriting, True)
        sOverWriteORAppend = "append"
    Else
        Set oLogFile = oLogFSO.OpenTextFile(sLogFile, ForAppending, True)
    End If

    If bIncludeDateStamp Then
        Message = Now & "   " & Message
    End If

    oLogFile.WriteLine(Message)
    oLogFile.Close

    If vLogMaximumLines > 0 Then
      Set oReadLogFile = oLogFSO.OpenTextFile(sLogFile, ForReading, True)   
      sFileContents = oReadLogFile.ReadAll
      aFileContents = Split(sFileContents, vbCRLF)
      If Ubound(aFileContents) > vLogMaximumLines Then
        sFileContents = Replace(sFileContents, aFileContents(0) & _
        vbCRLF, "", 1, Len(aFileContents(0) & vbCRLF))
        Set oLogFile = oLogFSO.OpenTextFile(sLogFile, ForWriting, True)
        oLogFile.Write(sFileContents)
        oLogFile.Close
      End If
      oReadLogFile.Close
    End If

    If vLogMaximumSize > 0 Then
      Set oReadLogFile = oLogFSO.OpenTextFile(sLogFile, ForReading, True)  
      sFileContents = oReadLogFile.ReadAll
      oReadLogFile.Close
      sFileContents = RightB(sFileContents, (vLogMaximumSize*2))
      Set oLogFile = oLogFSO.OpenTextFile(sLogFile, ForWriting, True)
      oLogFile.Write(sFileContents)
      oLogFIle.Close
    End If

    oLogFSO = Null
End Sub

Here's how you'd log exactly what you want after you set all your configuration options:

LogToFile vbCRLF &_
"Date Read: " & dateread & vbCRLF &_
"Book Title: " & title & vbCRLF &_
"Author: " & author & vbCRLF &_
"Pages Read: " & startpage  & vbCRLF &_
" - " & stoppage & vbCRLF &_
"Time Read: " & timeread & vbCRLF &_
"Pages Read Per Minute: " & pagesperminute

Upvotes: 1

Related Questions