2013-07-12 9 views
25

Mam tablicę próbek następująconode.js - Jak napisać tablicę do pliku

var arr = [ [ 1373628934214, 3 ], 
    [ 1373628934218, 3 ], 
    [ 1373628934220, 1 ], 
    [ 1373628934230, 1 ], 
    [ 1373628934234, 0 ], 
    [ 1373628934237, -1 ], 
    [ 1373628934242, 0 ], 
    [ 1373628934246, -1 ], 
    [ 1373628934251, 0 ], 
    [ 1373628934266, 11 ] ] 

chciałbym napisać tę tablicę do pliku, takie jak uzyskać plik następująco

1373628934214, 3 
1373628934218, 3 
1373628934220, 1 
...... 
...... 

Odpowiedz

49

Jeśli jest to tablica huuge i zajęłoby zbyt dużo pamięci, aby szeregować je ciąg przed piśmie, można użyć strumieni:

var fs = require('fs'); 

var file = fs.createWriteStream('array.txt'); 
file.on('error', function(err) { /* error handling */ }); 
arr.forEach(function(v) { file.write(v.join(', ') + '\n'); }); 
file.end(); 
+1

Dlaczego nie umieścić 'file.end();' po pętli zamiast testowania indeksu? –

+1

Masz rację, nie ma powodu, aby tego nie robić. Zaktualizowałem kod. – mak

+0

Dzięki! Moje tablice są rzędu 1000+, więc ta metoda działa idealnie – dopplesoldner

8

prostym rozwiązaniem jest użycie writeFile:

require("fs").writeFile(
    somepath, 
    arr.map(function(v){ return v.join(', ') }).join('\n'), 
    function (err) { console.log(err ? 'Error :'+err : 'ok') } 
); 
+0

Jeśli tak, nie zapomnij zwrotnego z ERR: http://nodejs.org/api/fs.html#fs_fs_writefile_filename_data_options_callback – bryanmac

+0

@ bryanmac Tak, to jest czystsze. edytowane. –

+0

Dzięki @dystroy! Jest bardzo czysty. – dopplesoldner

9

Pamiętaj, można uzyskać dostęp do starych, dobrych ECMAScript API, w tym przypadku, JSON.stringify().

przypadku prostych tablic lubią w swojej przykład:

require('fs').writeFile(

    './my.json', 

    JSON.stringify(myArray), 

    function (err) { 
     if (err) { 
      console.error('Crap happens'); 
     } 
    } 
); 
+0

Niezwiązane z ArrayBuffers –

+1

jeśli 'myArray' jest ogromne,' JSON.stringify (myArray) 'stanie się problemem. –

Powiązane problemy