I have a problem with my script related to writing to a text file.
The logic flow works as follows:
I read an entire unformatted text file with fs.readFileSync and pass all the read content to a variable of type string. After that I use the .split to break this text into several parts and keep each part of the broken text in an array. After that I use a for loop to go through this array and write to another text file, but here’s the problem, I don’t know if the information flow is too fast in the loop, which is sometimes written to this text file in a messy way, not respecting the order of the array being read.
Here is the code:
try{
const data = fs.readFileSync('test_zpl.txt', 'utf8')
txt = data.replace(/s/g,"");
} catch (err) {
console.log(err);
}
ArrayZPL = txt.split("+");
//Writting
for(i=0;i<ArrayZPL.length;i++){
try{
fs.writeFileSync('zpl_text.txt', ArrayZPL[i]);
} catch (err){
console.log(err);
}
}
//Reading
try{
const data = fs.readFileSync('zpl_text.txt', 'utf8')
zpl = data;
} catch (err) {
console.log(err);
}
Advertisement
Answer
fs.writeFileSync overwrites the file path passed as its first parameter. For a demonstration run the code below in node, type the contents of test.txt in the working directory on the console and repeat:
const fs = require("fs");
const path = require("path");
const filepath = path.resolve("./test.txt");
let string = "random-" + Math.random();
console.log( "writing %s to %s", string, filepath);
fs.writeFileSync( filepath, string);
To write the file in chunks you could create a writable stream and write array entries in chunks using asynchronous code. To maintain synchronous code, join array entries and write the result:
fs.writeFileSync('zpl_text.txt', ArrayZPL.join("");