dopplesoldner
dopplesoldner

Reputation: 9479

node.js - how to write an array to file

I have a sample array as follows

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

I would like to write this array to a file such as I get a file as follows

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

Upvotes: 90

Views: 188097

Answers (8)

valdeci
valdeci

Reputation: 15237

To do what you want, using the fs.createWriteStream(path[, options]) function in an ES6 way:

const fs = require('fs');
const writeStream = fs.createWriteStream('file.txt');
const pathName = writeStream.path;
 
let array = ['1', '2', '3', '4', '5', '6', '7'];
  
// write each value of the array on the file breaking line
array.forEach(value => writeStream.write(`${value}
`));

// the finish event is emitted when all data has been flushed from the stream
writeStream.on('finish', () => {
   console.log(`wrote all the array data to file ${pathName}`);
});

// handle the errors on the write process
writeStream.on('error', (err) => {
    console.error(`There is an error writing the file ${pathName} => ${err}`)
});

// close the stream
writeStream.end();

Upvotes: 33

Pankaj Chouhan
Pankaj Chouhan

Reputation: 11

const fs = require('fs');

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

const content = arr.map(item => item.join(', ')).join('\n');

const fp = 'output.txt';

fs.writeFileSync(fp, content, 'utf-8');

console.log('Array has been written to', fp);

Upvotes: 1

Roel Leal
Roel Leal

Reputation: 649

Try with this

await fs.writeFileSync('arreglo.txt', arreglo.join('\n '));

This code works for me

don't forget to import fs

import fs from 'fs';

Upvotes: 4

Spagetti Toprak
Spagetti Toprak

Reputation: 59

async function x(){
var arr = [ [ 1373628934214, 3 ],
[ 1373628934218, 3 ],
[ 1373628934220, 1 ],
[ 1373628934230, 1 ],
[ 1373628934234, 0 ],
[ 1373628934237, -1 ],
[ 1373628934242, 0 ],
[ 1373628934246, -1 ],
[ 1373628934251, 0 ],
[ 1373628934266, 11 ] ];
await fs.writeFileSync('./PATH/TO/FILE.txt', arr.join('\n'));
}

Upvotes: 5

KamalDeep
KamalDeep

Reputation: 834

We can simply write the array data to the filesystem but this will raise one error in which ',' will be appended to the end of the file. To handle this below code can be used:

var fs = require('fs');

var file = fs.createWriteStream('hello.txt');
file.on('error', function(err) { Console.log(err) });
data.forEach(value => file.write(`${value}\r\n`));
file.end();

\r\n

is used for the new Line.

\n

won't help. Please refer this

Upvotes: 4

Denys Séguret
Denys Séguret

Reputation: 382132

A simple solution is to use writeFile :

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

Upvotes: 19

Jairo
Jairo

Reputation: 911

Remember you can access good old ECMAScript APIs, in this case, JSON.stringify().

For simple arrays like the one in your example:

require('fs').writeFile(

    './my.json',

    JSON.stringify(myArray),

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

Upvotes: 58

mak
mak

Reputation: 13405

If it's a huuge array and it would take too much memory to serialize it to a string before writing, you can use streams:

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

Upvotes: 140

Related Questions