编辑文本并保存

Edit text and save

我正在hta中做一个脚本,需要他具备以下功能:

具有以下功能:

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

代码:

 <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>

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

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

<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>

没有所有的脂肪,将脚本放入头部并将小部件放入表单是自然而然的。

现在需要的代码:我们需要一个文件规范(比名字更好)和 a/the 一个且唯一的 FileSystemObject(永远不要命名为 ofs1);如果文件存在,应该加载到文本区域;应保存文本区域的内容。所以新的 VBScript 部分是:

Option Explicit

Const csFSpec = "E:\trials\SoTrials\answers41045\hta505115.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