Discord.js机器人读取文件行数结果异常,求助解决方法
解决Discord.js机器人计算文本文件行数的问题
嘿,我一眼就看出问题所在啦!你现在用content.length统计的是文件里的总字符数,不是行数——这就是为啥2行显示4、3行显示7的原因,毕竟每行的内容加上换行符都算字符呀。
正确的解决思路
要统计行数,我们需要把文本内容按换行符分割成数组,然后数数组的长度就行。这里要注意不同操作系统的换行符差异:Windows用\r\n,而Linux/macOS用\n,所以用正则表达式可以兼容两种情况。
修改后的代码
const fs = require('fs'); // 记得引入fs模块,你之前的代码可能漏了这个 const path = "./commands/test.js"; try { // 读取文件内容 const content = fs.readFileSync(path, 'utf-8'); // 按换行符分割,兼容所有系统的换行格式 const allLines = content.split(/\r?\n/); // 如果你想统计所有行(包括空行),直接用allLines.length // 如果只想统计非空行,就过滤掉空内容的行 const validLineCount = allLines.filter(line => line.trim() !== '').length; // 发送结果到频道 msg.channel.send(`The lines of code is: **${validLineCount}** lines`); } catch (error) { // 加上错误处理,避免机器人因为文件读取失败崩溃 msg.channel.send(`Oops, failed to read the file: ${error.message}`); }
额外说明
split(/\r?\n/):这个正则会匹配\n(Unix风格)和\r\n(Windows风格)的换行,确保不管文件在哪个系统生成的都能正确分割。- 空行处理:如果你的文件末尾有多余的换行,或者有空行,
filter方法可以帮你去掉这些无效行,只统计有内容的行。如果不需要过滤,直接用allLines.length就行。 - 错误处理:添加
try-catch是很重要的,万一文件路径写错、文件不存在或者没有读取权限,机器人不会直接崩溃,还能给用户反馈错误信息。
内容的提问来源于stack exchange,提问作者Bezzy
相关产品推荐
相关产品推荐

