0

テキスト ファイルにローカルに保存する HTA To Do リストを作成しようとしています。送信ボタンを押すたびに、hta 本文内に表示される新しいエントリが生成され、テキスト ファイル内に保存されます。これをさらに発展させたい:

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

2 に答える 2

0

特にテキストファイルの使用に縛られていますか? データベース (access など) を使用した場合、これは非常に簡単に実行できます (HTA で access データベースを使用するために access をインストールする必要はありません)。そして、それは他のいくつかの可能性を開くでしょう。

ちなみに、私はあなたがこれをしていることにも気づきました:

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

大したことではありませんが、そのように文字列を連結すると、パフォーマンスが向上しません。すべてを同時に変数に書き込む方がよいでしょう。そうしないと、変数をメモリに何度も書き続ける必要があります。

于 2011-07-04T20:24:06.187 に答える
0

HTA を使用してファイルを読み取りたい場合は、javaScript で簡単に実行できます。コンテキストが変更されるため、IE では、コンピューターまたはコンピューターがリンクされているネットワーク上のファイルを直接読み取ることができます。そのためには、ファイル システム オブジェクト (FSO) にアクセスする必要があります。

FSO に関する完全なドキュメント

それでもデータベースにアクセスする場合は、ADODB.Connection を使用する必要があります。これにより、ローカルまたはリモートでデータベースに接続できます。このテーマに関するドキュメントはあまりありませんが、私の職場でそれを行いました。少し想像力を働かせれば、それを修正する方法を理解できます。

ADODB.Connect に関するドキュメント このドキュメントでは、例は VB で書かれていますが、JS でも同様に記述できます。

于 2011-07-12T12:05:10.147 に答える