HTA(vbs) - 待办事项列表 - 删除或修改数组项

时间:2011-07-04 10:25:50

标签: vbscript hta

我正在尝试创建一个本地保存到文本文件的HTA待办事项列表。每次按下提交按钮都会生成一个显示在hta体内的新条目,并将其保存在文本文件中。我想进一步发展这个:

  1. 删除条目并更新正文/文本文件
  2. 修改条目并更新正文/文本文件
  3. 将新条目放在首位
  4. 有什么建议吗?

         <html>
        <head>
        <HTA:APPLICATION SINGLEINSTANCE="yes" APPLICATIONNAME="To Do List">
        </head>
    
        <SCRIPT Language="VBScript">
        Sub Window_OnLoad 
        ReadBlog
        End Sub 
    
            Sub SaveData
            strDel1="<"
            strDel2=">"
                Set objFSO = CreateObject("Scripting.FileSystemObject")
                If objFSO.FileExists("C:\Test.txt") Then
                   Set objFile = objFSO.OpenTextFile("C:\Test.txt", 8)
                    strLine = strDel1 & Time & vbTab & Date & vbTab & Title.Value & vbTab & Message.Value & strDel2
                    objFile.WriteLine strLine
                    objFile.Close
                Else
                    Set objFile = objFSO.CreateTextFile("C:\Test.txt")
                    strLine = strDel1 & Time & vbTab & Date & vbTab & Title.Value & vbTab & Message.Value & strDel2
                    objFile.WriteLine strLine
                    objFile.Close
                End If
    
                 ReadBlog
                 ClearText
            End Sub
    
            Sub ReadBlog
            Const ForReading = 1, ForWriting = 2
             dim sampletext, objRegExp, SearchPattern, ReplacePattern, matches
             Dim objFSO
             Set objFSO = CreateObject("Scripting.FileSystemObject")
             Set objFile = objFSO.OpenTextFile("C:\Test.txt", ForReading)
                 Do Until objFile.AtEndOfStream
                    sampletext = objFile.ReadAll
                    SearchPattern = "<" 
                    SearchPattern = SearchPattern & "(.*?)([\s\S]*?)" 
                    SearchPattern = SearchPattern & ">" 
                    Set objRegExp = New RegExp
                    objRegExp.Pattern = searchpattern ' apply the search pattern
                    objRegExp.Global = True ' match all instances if the serach pattern
                    objRegExp.IgnoreCase = True ' ignore case 
                    Set matches = objRegExp.execute(sampletext)
    
    
                        If matches.Count > 0 Then ' there was at least one match to the search pattern  
                            i=0
                            For Each match in matches
    
                            arrEntry = Split(Split(match.Value, "<")(1), ">")(0)
                            arrFields = Split(arrEntry, vbTab)
                            strTime = arrFields(0)
                            strDate = arrFields(1)
                            strTitle = arrFields(2)
                            strMessage = arrFields(3)
    
                                strHTML = strHTML & "<p>" & strTime & "</p>"
                                strHTML = strHTML & "<p>" & strDate & "</p>"
                                strHTML = strHTML & "<p>" & strTitle & "</p>"
                                strHTML = strHTML & "<p>" & strMessage & "</p>" 
                                strHTML = strHTML & "<input type='button' name='Delete' value='Delete' >"& i &"<p>"
                            i=i+1
                            Next
    
                        Else ' there were no matches found
                          MsgBox objRegExp.Pattern & "was not found in the string"
                        End If  
                    Loop
            DataArea.InnerHTML = strHTML
            Set objRegExp = Nothing
            Set objFSO = Nothing
        End Sub
    
    
    
        Sub ClearText
               Title.Value = "" 
               Message.Value = ""
         End Sub
    
        </SCRIPT>
    
        <body>
            <input type="text" name="Title" size="101"><p>
            <textarea rows="10" cols="76" type="text" name="Message" size="25"></textarea><p>
            <input type="button" value="Submit" onClick="SaveData">
            <p><div id="DataArea"></div></p> 
        </body>
    </html>
    

2 个答案:

答案 0 :(得分:0)

您是否特别关注使用文本文件?如果您使用了数据库(例如访问权限),则可以非常轻松地执行此操作(您无需安装访问权限即可使用带有HTA的访问数据库)。它会开辟其他一些可能性。

顺便说一下,我也注意到你这样做了:

                        strHTML = strHTML & "<p>" & strTime & "</p>"
                        strHTML = strHTML & "<p>" & strDate & "</p>"
                        strHTML = strHTML & "<p>" & strTitle & "</p>"
                        strHTML = strHTML & "<p>" & strMessage & "</p>" 

不是一件大事,但是连接这样的字符串并不是很好的表现。你最好将它全部写入变量,否则它必须一遍又一遍地将变量写入内存。

答案 1 :(得分:0)

如果您想使用HTA读取文件,可以使用javaScript轻松完成。由于上下文改变了IE,所以你可以直接读取计算机或网络上的文件来链接计算机。为此,您需要访问文件系统对象(FSO)

Full Documentation on FSO

如果您仍在寻找访问数据库,则需要使用ADODB.Connection。这将允许您连接到数据库localy或远程。在我的工作场所,我们没有太多关于这个主题的文档。只需一点点想象力,你就可以弄清楚如何解决它。

Documentation on the ADODB.Connnect 在本文档中,该示例在VB中,但您也可以在JS中编写它们。