2011-07-04 40 views
0

我正嘗試創建一個HTA待辦事項列表,將其本地保存到文本文件中。每次按下提交按鈕時,都會生成一個新的條目,顯示在hta正文中,並保存在文本文件中。我想進一步開發這個:HTA(vbs) - 待辦事項列表 - 刪除或修改數組項目

  1. 刪除條目和更新的身體/文本文件
  2. 修改條目,並更新身體/文本文件
  3. 放在上面

任何建議新條目?

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

回答

0

您是否特別使用文本文件?如果您使用了數據庫(如訪問),則可以非常輕鬆地進行此操作(您無需安裝訪問數據庫即可使用HTA訪問數據庫)。它會開闢一些其他的可能性。

順便說一句,我也注意到你這樣做:

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

不是什麼大事情,但串聯這樣的字符串是不是偉大的表現。你最好將它全部寫入變量,否則它必須不斷地將變量寫入內存。

+0

Thx讓我開始思考其他解決方案。但是,以前從未使用過數據庫。你能否提供一些例子說明如何用數據庫實現同樣的功能? – cippall

+0

這裏有一個非常好的例子,你可以分開玩耍:http://www.codingforums.com/archive/index.php/t-63102.html – Simon

0

如果要使用HTA讀取文件,可以使用javaScript輕鬆完成。由於上下文更改,IE會讓您直接讀取計算機或網絡上文件,以使計算機鏈接到該文件。爲了做到這一點,你需要訪問文件系統對象(FSO)

Full Documentation on FSO

如果你還在尋找訪問您需要使用ADODB.Connection數據庫。這將允許您連接到本地數據庫或遠程連接。 Altought沒有太多有關我們在工作場所完成的主題的文檔。有一點想象力,你可以找出如何解決它。

Documentation on the ADODB.Connnect 在本文檔中,該示例是在VB中,但您也可以在JS中編寫它們。

+0

這是一個很好的例子。謝謝。 – cippall