【问题标题】:Node js - Remove string from text fileNode js - 从文本文件中删除字符串
【发布时间】:2018-12-04 14:24:58
【问题描述】:

如何从文本文件中删除字符串?

fs.readFile('./banlist.txt', function read(err, data) {
                if (err) {
                    throw err;
                }
                lastIndex = function(){
                    for (var i = data_array.length - 1; i > -1; i--) 
                    if (data_array[i].match(ip))
                        return i;
                }()
                delete data_array[lastIndex];
            });

但是控制台给我消息:data_array 没有定义。 我想删除 ip 地址行。

【问题讨论】:

  • 你在哪里定义data_array?我在这段代码 sn-p 中没有看到它。
  • 文本文件中的所有内容都是字符串。而且fs.readFile 不会将数据填充为数组,其次字符串是不可变的。 delete 关键字仅适用于对象的成员。 data_array 没有在任何地方定义。检查函数中的参数是否正确
  • 你可能需要在没有那个字符串的情况下重写整个东西。
  • 读取文件,修改数据,然后重写文件? (如果它是一个合理的大小......)
  • 如果不是太大:var newData = data.toString().split('\n').filter(val=>val!==ip).join('\n') 然后将newData(string)写回​​文件。

标签: javascript node.js


【解决方案1】:

您的代码似乎过于复杂。最大的问题是data_array 不存在,data 不是数组。最简单的解决方案(虽然是同步的,但如果处理大文件可能会很慢)如下:

var data = fs.readFileSync('banlist.txt', 'utf-8');
var ip = "STRING_TO_REMOVE";

var newValue = data.replace(new RegEx(ip), '');
fs.writeFileSync('banlist.txt', newValue, 'utf-8');

这将从文件中的任何位置删除第一次出现的指定字符串。这意味着如果您正在搜索“foo”并且您的文件包含"This is foobar.",它将以"This is bar." 结尾。如果您的项目位于不同的行中并且想要删除任何匹配的项目,请在您的问题中说明这一点。

以上内容改编自this答案。

【讨论】:

  • 我想不出它会产生空间的任何原因。如果您的意思是它不会删除空格,那是故意的。您可以在删除字符串中添加空格以删除空格。如果您正在寻找更复杂的搜索(例如,只有在存在空格时才删除空格),您可以将 new RegEx(ip) 替换为正则表达式,如 here 所述,或提出其他问题。
猜你喜欢
  • 2014-12-19
  • 2013-08-08
  • 2019-02-18
  • 2020-10-13
  • 2022-01-16
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多