2013-04-17 4 views
7

Ho creato una procedura per scrivere il contenuto in un file di testo nel mio computer locale.Scrittura di dati in un file di testo locale con 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> 

Questo sta funzionando correttamente e in grado di aggiungere i miei nuovi dati al file.

Ma voglio aggiornare un particolare contenuto di riga in base all'ID che sto passando.
Ho cercato molto, ma non sono riuscito a trovarne.

Come è possibile aggiornare una determinata riga nel file in base all'ID?

Nota: - Non sto utilizzando alcun server in quanto tale. Ho un file html (contiene tutte le funzionalità) che eseguirò sul mio computer locale stesso.

+1

puoi condividere il codice HTML –

+0

Aggiungere il codice HTML in questione. Non nel commento. – arulmr

+0

Perché non lavori semplicemente con JSON su quel txt? Quindi puoi JSON.parse() per analizzare il contenuto e creare un JS che controlli l'ID/riga/qualsiasi cosa prima di aggiornare e JSON.stringify() per scrivere sul retro di txt. – RaphaelDDL

risposta

10

nostro 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 (scrittura al file txt):

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); 
} 

il controllo di una particolare riga:

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!"); } 
    } 
} 

mettere queste all'interno di un file .hta ed eseguire esso. Testato su W7, IE11. Sta funzionando. Inoltre, se vuoi che spieghi cosa sta succedendo, dillo.

+4

Funziona solo in IE –

+1

@Everyone_Else Questa non è una sorpresa. L'OP utilizza ActiveX che funziona in IE. Inoltre, altri browser non consentirebbero l'accesso ai file locali. – akinuri

+1

È una cattiva risposta. Le buone risposte sono utili per gli altri che fanno la stessa domanda e non usano IE. – CashCow