在 Txt 文件中查找字符串,删除整行

2024-02-05

我目前正在使用 node.js 创建一个 IRC 机器人。该机器人允许用户将歌曲链接添加到数据库中。每次有人提交一首歌曲时,它都会添加到“shuffle.txt”的新行中,如下所示:

user1,The Beatles,Yesterday,(youtube link)
user2,The Rolling Stones,Angie,(youtube link)
user1,The Bealtes,Yellow Sumbarine,(youtube link)

请注意,user1 在最新添加的内容中输错了一些信息。我正在尝试创建一个 UNDO 命令,以便用户可以删除他们最近输入的行。我计划通过在 shuffle.txt 中查找其名称的最新出现位置并删除找到的整行来实现此目的。这是我的消息监听器:

bot.addListener('message', function(from, to, message) {
    if (message.indexOf(config.prefix) == 0) {

        message = message.slice(1);
        var token = message.split(" ");

        if (token[0] == 'undo') {
              //find and delete
            }

    }
});

用户输入的命令存储为from

我假设我必须按照以下方式做一些事情:

var songList = fs.readFileSync('shuffle.txt', 'utf8');
var position = songList.indexOf(from);

if (position != -1) { //if 'from' found

  //find LAST occurrence of 'from'
  //get length from here to next occurrence of '\n'
  //substr(length + 1)

  fs.writeFile('shuffle.txt', songList, function(err) {
    if (err) {
      console.log (err);
    }

}

我是 JavaScript 新手,这是我第一次使用 Node.js,因此我可以使用可以获得的任何帮助!感谢大家。

编辑:我还应该指出,我不需要命令识别方面的帮助。我只需要查找/删除部分的帮助。干杯!


Edit2:使用新的解决方案进行编辑。

你可以试试这个:

fs.readFile('shuffle.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('user1'))
            return i;
    }()

    delete data_array[lastIndex];

});

将文件分割成行,通过简单的向后循环找到最后一行,使用删除该行delete,然后将其重新拼凑在一起。

demo http://jsfiddle.net/7zLCZ/4/

另外,你不应该使用readFileSync在节点中,阻塞节点可能很危险,因为它是单线程的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Txt 文件中查找字符串,删除整行 的相关文章

随机推荐