使用JavaScript将数据写入本地文本文件

9
我已经创建了一个过程,用于将内容写入到我的本地机器的文本文件中。
<form id="addnew">
    <input type="text" class="id">
    <input type="text" class="content">
    <input type="submit" value="Add">
</form>
<script>
    jQuery(function($) {
        $('#form_addjts').submit(function(){
            writeToFile({
                id: $(this).find('.id').val(), 
                content: $(this).find('.content').val()
            });
            return false;
        }); 
        function writeToFile(data){
            var fso = new ActiveXObject("Scripting.FileSystemObject");
            var fh = fso.OpenTextFile("D:\\data.txt", 8);
            fh.WriteLine(data.id + ',' + data.content);
            fh.Close(); 
        } 
    }); 
</script>

这个工作很好,能够将我的新数据附加到文件中。

但是我想根据我传递的ID更新特定行的内容。
我搜索了很多,但没有找到任何东西。

如何根据ID在文件中更新特定行?

注意:- 我没有使用任何服务器。我有一个HTML文件(包含所有功能),我将在本地计算机上运行它。


1
你能分享一下 HTML 吗? - Arun P Johny
将有关的HTML代码添加。不要在注释中添加。 - arulmr
为什么不直接使用JSON处理那个txt文件呢?然后你可以使用JSON.parse()来解析内容并创建一个JS,检查ID/行/其他内容,然后使用JSON.stringify()将其写回txt文件。 - RaphaelDDL
1个回答

7

我们的 HTML:

<div id="addnew">
    <input type="text" id="id">
    <input type="text" id="content">
    <input type="button" value="Add" id="submit">
</div>

<div id="check">
    <input type="text" id="input">
    <input type="button" value="Search" id="search">
</div>

JS(将文本写入文件):

function writeToFile(d1, d2){
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var fh = fso.OpenTextFile("data.txt", 8, false, 0);
    fh.WriteLine(d1 + ',' + d2);
    fh.Close();
}
var submit = document.getElementById("submit");
submit.onclick = function () {
    var id      = document.getElementById("id").value;
    var content = document.getElementById("content").value;
    writeToFile(id, content);
}

检查特定的行:

function readFile(){
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var fh = fso.OpenTextFile("data.txt", 1, false, 0);
    var lines = "";
    while (!fh.AtEndOfStream) {
        lines += fh.ReadLine() + "\r";
    }
    fh.Close();
    return lines;
}
var search = document.getElementById("search");
search.onclick = function () {
    var input   = document.getElementById("input").value;
    if (input != "") {
        var text    = readFile();
        var lines   = text.split("\r");
        lines.pop();
        var result;
        for (var i = 0; i < lines.length; i++) {
            if (lines[i].match(new RegExp(input))) {
                result = "Found: " + lines[i].split(",")[1];
            }
        }
        if (result) { alert(result); }
        else { alert(input + " not found!"); }
    }
}

将这些放在一个 .hta 文件中并运行它。已经在 W7,IE11 上测试过了,可以正常工作。如果您需要我解释其中的原理,请告诉我。

2
@Everyone_Else 这并不奇怪。OP正在使用在IE中工作的ActiveX。此外,其他浏览器不允许访问本地文件。 - akinuri
2
这仍然是一个不好的答案。好的答案对于那些提出同样问题并且不使用IE的人来说是有用的。 - CashCow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接