javascript - 使用 Node.js 在文本文件中完成作业后的值更新
问题描述
我有这样的文本数据,我标记 * 字符集以检查未完成的工作。
这是我的部分代码。我想在 txt 行以 * charset 开头时制作它,它应该被处理,并且在处理过的字符串的 * charset 应该被删除之后。
fs.readFile('data.txt', async function (err, data) {
if (err) throw err;
let array = data.toString().split("\n");
for (i in array) {
if (array[i].charAt(0) === '*') {
console.log(`Now Processing : ${array[i]} | ${array.length - i -1} items left`);
//
// SOME JOBS
//
let newValue = array[i].replace('*', '');
fs.writeFile('data.txt', newValue, 'utf-8', function (err, data) {
if (err) throw err;
console.log('Done!');
})
} else {
console.log(`${array[i]} Already Captured`)
}
解决方案
据我了解,您正在尝试通读文件,查找包含“*”字符的行,做一些工作,然后从受影响的行中删除 *。
首先,调用fs.writeFile
发生在循环内,因此该循环的每次迭代都会调用 writeFile 函数。从 nodejs 文档中,此方法将“......异步将数据写入文件,如果文件已存在则替换该文件。” 您正在用每次迭代替换文件。您想要做的是使用fs.appendFile
或更好地将“附加”系统标志传递给 writeFile。系统标志可以在这里看到。看一下'a'标志并将其传递给writeFile的选项对象。
您在 readFile 回调中对 async 的使用也不完整,因为您没有在该回调中调用 await 。
fs.readFile('data.txt', async function (err, data) {
if (err) throw err;
let array = data.toString().split("\n");
for (i in array) {
if (array[i].charAt(0) === '*') {
console.log(`Now Processing : ${array[i]} | ${array.length - i -1} items left`);
//
// SOME JOBS
//
let newValue = array[i].replace('*', '');
newValue = newValue + '\n';
await fs.appendFile('data.txt', newValue, 'utf-8', function (err, data) {
if (err) throw err;
console.log('Done!');
})
} else {
console.log(`${array[i]} Already Captured`)
}
}
});
推荐阅读
- asp.net-web-api - 从桌面问题调用 asp.net WebMethod
- python - 如何在 FiPy 中实现这个 PDE 系统?
- java - 如何在 Nav Drawer 活动中向 HomeFragment 添加地图活动,以便地图在 android studio 中工作
- javascript - 如何使用 axios 获取流
- javascript - jQuery Ajax `success:` 后显示成功消息并重新加载
- android - 将前台服务与 PlayerView UI 同步?
- php - 致命错误:未捕获的 PDOException:SQLSTATE [23000]:违反完整性约束:1452 无法添加或更新子行:
- apache-kafka - Kafka Consumer endOffsets() 未返回最后一个偏移量
- amazon - Lex + Connect 无法使用检查联系人属性块获取“DialogueState”属性以匹配
- azure-synapse - AAS 刷新问题:为 SQL 源提供的凭据无效