2013-04-17 19 views
7

Utworzono procedurę zapisywania treści do pliku tekstowego na komputerze lokalnym.Zapisywanie danych w lokalnym pliku tekstowym za pomocą 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> 

To działa poprawnie i jest w stanie dołączyć moje nowe dane do pliku.

Ale chcę zaktualizować konkretny wiersz ZAWARTOŚĆ na podstawie identyfikatora, który przekazuję.
Szukałem dużo, ale nie mogłem znaleźć.

Jak zaktualizować określony wiersz w pliku na podstawie identyfikatora?

Uwaga: - Nie używam żadnego serwera jako takiego. Mam plik html (zawiera całą funkcjonalność), który będę uruchamiał na mojej lokalnej maszynie.

+1

Czy możesz udostępnić html –

+0

Dodaj odpowiedni kod HTML. Nie w komentarzu. – arulmr

+0

Dlaczego po prostu nie pracujesz z JSON'em na tym txt? Następnie możesz JSON.parse() przeanalizować zawartość i utworzyć JS, który sprawdza ID/wiersz/cokolwiek przed aktualizacją i JSON.stringify(), aby zapisać do txt z powrotem. – RaphaelDDL

Odpowiedz

10

Nasz 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 (zapis do pliku 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); 
} 

sprawdzenie konkretnego rzędu:

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

umieścić je wewnątrz pliku .hta i metę to. Testowany na W7, IE11. To działa. Jeśli chcesz, żebym wyjaśnił, co się dzieje, powiedz to.

+4

Działa tylko w IE –

+1

@Everyone_Else Nie jest to niespodzianką. OP używa ActiveX, który działa w IE. Poza tym inne przeglądarki nie pozwalają na dostęp do lokalnych plików. – akinuri

+1

To jest zła odpowiedź. Dobre odpowiedzi są przydatne dla innych, którzy zadają to samo pytanie i nie używają IE. – CashCow