编辑文本并保存

时间:2015-04-08 02:54:43

标签: vbscript hta

我正在制作一个hta剧本,需要他具备以下功能:

它具有以下功能:

  1. 如果文件.txt不存在,请不要打开脚本。
  2. 删除输入框并仍然可以保存更改。
  3. 如果用户尝试保存空文本,则会显示错误。
  4. 如果用户进行有效修改(非空),则显示消息 声明它已被保存。
  5. CODE:

     <HTML>
     <head><title>Name</Title>
     <HTA:Application
          Border= "thin"
          Application="/md/input"
          Scoll="NO"
          Singleinstance="Yes"
          Icon="01.ico">
          ShowInTaskbar="Yes"
          Caption="Yes">
     </Head>
     <Script Language="VBSCRIPT" Type = "text/vbscript">
     Sub Window_Onload
        Window.resizeTo 400,500
     End Sub
       Const ForReading = 1
       Const ForWriting = 2
       Const ForAppending = 8
       Set fSo1 = CreateObject("Scripting.FileSystemObject")
       wkDir = "test.txt"
     '----------------------------------------------------------
         sub Window_onLoad()
        Window.resizeTo 400,500
         set oFSO=CreateObject("Scripting.FileSystemObject")
         set oFile=oFSO.OpenTextFile("Test.txt",1)
         text=oFile.ReadAll
         document.all.DataArea.value=text
         oFile.Close
         end sub
     '----------------------------------------------------------
     FUNCTION SaveFile(FileName, DataArea)
        CALL FileStat(FileName, msg)
        on error resume next
        sFile = wkDir & FileName.value
        Set wrFile = fSo1.OpenTextFile(sFile, ForWriting)
            wrFile.writeline(DataArea.value)
         self.close
     END FUNCTION
     '----------------------------------------------------------
     FUNCTION CloseFile(FileName, DataArea)
        Call FileStat(FileName, msg)
        on error resume next
        cFile = wkDir & FileName.value
        Set wrFile = fSo1.OpenTextFile(cFile, ForAppending)
            wrFile.Close
        DataArea.value = ""
        FileName.Value = ""
     END FUNCTION
     '----------------------------------------------------------
     FUNCTION QuitEdit
         self.close
     END FUNCTION
     '----------------------------------------------------------
     FUNCTION FileStat(FileName, msg)
       eFile = wkDir & FileName
       IF (fSo1.FileExists(eFile)) THEN
           msg = oFile & " exists."
           ELSE
           on error resume next
       END IF
     END FUNCTION
     '----------------------------------------------------------
     </Script>
     <body bgcolor="C0C0C0">
     <Table>
     <Th> Name </Th>
    <TR><td><input type="text" name="FileName"></td></TR>
     </Table>
     <Table border="2">
     <TR><td>
     <textarea name="DataArea" rows="18" cols=37></textarea>
     </td></TR>
     <TR><td>
     <input type="BUTTON" value="Save"  onclick="SaveFile FileName, DataArea">
     <input type="BUTTON" value="Cancel"  onclick="QuitEdit">
     </td></TR>
     </Table>
     </body>
     </html>
    

1 个答案:

答案 0 :(得分:2)

90%的问题是由编写的代码引起的。因此,获得一个好脚本的简单方法是摆脱该代码。 4%的VBScript问题是由 not 引起的,以“Option Explicit”开头。所以让我们补充一点。 4%的VBScript问题是由“On Error Resume Next”隐藏错误引起的。永远不要在全球范围内使用它,也绝不要在它之后最多检查两行。

删除(a)与编辑文件无关的所有内容(图标,其他不相关的HTA属性,调整大小,重复(wkDir,“test.txt”)),看起来像是由程序员每小时支付的内容(调用语句,函数不返回,变量使用一次)和(b) - 目前 - 代码必须编写解决“编辑文件”问题,我们得到:

<html>
 <head>
  <title>Edit File Demo</title>
  <hta:application
     id="demo"
  ></hta>
  <script type="text/vbscript">

Option Explicit

Sub Window_OnLoad()
End Sub

Sub SaveFile()
End Sub

  </script>
 </head>
 <body>
  <form>
   <textarea name="DataArea" rows="18" cols=37></textarea>
   <input type="BUTTON" value="Save" onclick="SaveFile">
  </form>
 </body>
</html>

没有所有的脂肪,将脚本放入头部并将小部件放入表单中就会很自然。

现在需要的代码:我们需要一个文件规范(不仅仅是一个名称)和一个唯一的FileSystemObject(永远不会被命名为s1);如果文件存在,则应将其加载到textarea中;应该保存textarea的内容。所以新的VBScript部分是:

Option Explicit

Const csFSpec = "E:\trials\SoTrials\answers\8841045\hta\29505115.txt"
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")

Sub Window_OnLoad()
  If goFS.FileExists(csFSpec) Then
     document.all.DataArea.value = goFS.OpenTextFile(csFSpec).ReadAll()
  Else
     document.all.DataArea.value = csFSpec & " created"
  End If
End Sub

Sub SaveFile()
  goFS.CreateTextFile(csFSpec).Write document.all.DataArea.value
End Sub