在文件中,我的数据看起来像这样:
id=1349 console.log('done this') status=waiting
id=2345 console.log('done this too') status=waiting
如果此时会读取一行,请更改状态以完成操作并将其保存回文件。
这就是我所拥有的:
fs.readFile('list.txt', 'utf8', function (err,data) {
if (data.includes('status=waiting')) {
const str = data.trim();
const arr = str.replace(/;$/gm, '').split(/\n/g)
for (var i = 0; i < arr.length; i++) {
var result = arr[i].replace('status=waiting', 'status=complete');
var temp = result.split(" ");
console.log(temp[1]);
eval(temp[1]); //run the console.log
console.log(`RESULT IS: ${result}`); // This line should now have status=complete when it saves below
// Now Save it back with the status=complete in it
fs.writeFile('list.txt', result, 'utf8', function (err) {
if (err) return console.log(err);
});
};
}
});
问题是保存...尽管变量结果在保存之前是正确的,但它只是替换文件文本而仅保存最后一个。
我该如何解决?
ps:我知道不应该使用eval,但这只是供个人使用。
答案 0 :(得分:1)
写入文件时,不能一行一行地写,而是写全部内容。对于逐行方法,您可能要使用fs.appendfile,该方法表示方法为Monoid Morphisms, Products, and Coproducts,只是将行追加到文件上,而不删除初始行。这样可能对您不起作用。
所以,我想您想要的是
status=waiting
,请替换为status=complete
fs.readFile("list.txt", "utf8", (err, data) => {
if (err) {
throw new Error(err);
}
const dataByLine = data.toString().split("\n");
const newData = dataByLine.map(line => {
if (line.includes("status=waiting")) {
const newLine = line.replace("status=waiting", "status=complete");
return newLine;
}
return line;
});
const result = newData.join("\n");
fs.writeFile("list.txt", result, "utf8", err => {
if (err) return console.log(err);
console.log('The file has been saved!');
});
});
PS-这不包括您的任何评估日志。它只是向您显示了朝正确方向迈出的一步。