首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Node.js删除txt文件中的一行

用Node.js删除txt文件中的一行
EN

Stack Overflow用户
提问于 2022-07-04 16:55:28
回答 2查看 78关注 0票数 2

最近,我制作了一个脚本,在脚本中,我希望从带有节点的txt文件中删除一个完全匹配的。它的打印结果为true,但实际上并没有从txt文件中删除该行。我是用不和来引起争论的。我不知道我做错了什么,但这是我的剧本:

代码语言:javascript
复制
        const fs = require('fs')
        fs.readFile('notredeemed.txt', function (err, data) {
            if (err) throw err;
                if (data.toString().match(new RegExp(`^${args[0]}$`, "m"))) {
                    fs.readFile('notredeemed.txt', 'utf8', function (err,data) {
                      if (err) {
                        return console.log(err);
                      }
                      var result = data.replace(/${args[0]/g, '');
                    
                      fs.writeFile('notredeemed.txt', result, 'utf8', function (err) {
                         if (err) return console.log(err);
                      });
                    });
                      console.log("true")

如果有人能帮我,我会很感激的:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-04 17:58:49

我认为你可以和你现在的解决方案非常相似,只是正则表达式有点差。

我使用两个捕获组作为一行的分隔符,而不是仅仅使用^$来指示整个字符串以args[0]开头和结尾。

这一个匹配任何换行符或字符串的开头。适用于第一行文件,并防止部分替换,例如llo替换Hello

代码语言:javascript
复制
(\n|^)

这个匹配一个回车或字符串的末尾。这适用于文件末尾没有换行符的情况,也可以防止Hel替换Hello

代码语言:javascript
复制
(\r|$)

这应该确保你总是拿出一整条与你的args相匹配的行。

我还消除了第二个readFile,因为没有必要让它开始工作。

代码语言:javascript
复制
const fs = require("fs")

fs.readFile("notredeemed.txt", function (err, data) {
  if (err) throw err

  const match = new RegExp(`(\n|^)${args[0]}(\r|$)`)

  const newFile = data.toString().replace(match, ``)

  fs.writeFile("notredeemed.txt", newFile, "utf8", function (err) {
    if (err) return console.log(err)
    console.log("true")
  })
})
票数 1
EN

Stack Overflow用户

发布于 2022-07-04 17:27:08

这是我的解决办法。

算法:

使用所需的行旗(通常是"\r\n")

  • Filter或要删除的所有行)将文件内容拆分成单独的行,将所有过滤过的行与EOL标志连接起来。

代码语言:javascript
复制
const replacingLine = "- C/C++ addons with Node-API";

const fileContent = `- V8
- WASI
- C++ addons
- C/C++ addons with Node-API
- C++ embedder API
- C/C++ addons with Node-API
- Corepack`;

const newFileContent = replace({ fileContent, replacingLine });

console.log(newFileContent);

function replace({ fileContent, replacingLine, endOfLineFlag = "\n" }) {
  return fileContent
    .split(endOfLineFlag)
    .filter((line) => line !== replacingLine)
    .join(endOfLineFlag);
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72859950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档