2013-04-17 2 views
7

Я создал процедуру для записи содержимого в текстовый файл на моем локальном компьютере.Запись данных в локальный текстовый файл с помощью javascript

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

Это прекрасно работает и может добавлять мои новые данные в файл.

Но я хочу обновить определенную строку CONTENT на основе идентификатора, который я передаю.
Я много искал, но не смог найти.

Как можно обновить определенную строку в файле на основе идентификатора?

Примечание: - Я не использую сервер как таковой. У меня есть html-файл (содержит все функции), который я буду запускать на моем локальном компьютере.

+1

вы можете поделиться html –

+0

Добавьте код HTML в вопрос. Не в комментариях. – arulmr

+0

Почему бы вам просто не работать с JSON на этом txt? Затем вы можете JSON.parse() анализировать содержимое и создавать JS, который проверяет ID/строку/все перед обновлением и JSON.stringify() для записи на txt назад. – RaphaelDDL

ответ

10

Наш 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. Работает. Также, если вы хотите, чтобы я объяснил, что происходит, скажите так.

+4

Работает только в IE –

+1

@Everyone_Else Это неудивительно. OP использует ActiveX, который работает в IE. Кроме того, другие браузеры не разрешают доступ к локальным файлам. – akinuri

+1

Это плохой ответ. Хорошие ответы полезны для других, которые задают один и тот же вопрос, и не используют IE. – CashCow

Смежные вопросы