无法对 fs.readFileSync() 返回的字符串运行 includes() 方法
Posted
技术标签:
【中文标题】无法对 fs.readFileSync() 返回的字符串运行 includes() 方法【英文标题】:Unable to run includes() method on string returned by fs.readFileSync() 【发布时间】:2021-11-14 18:31:44 【问题描述】:有点麻烦:
let data = fs.readFileSync(pathToCsv, "utf8");
数据的价值是:
clan,mem1,mem2,mem3,mem4,language,managerID,serverJoinedDate
pm,
pm
(通过 console.log())
但data.toString().includes("pm")
仍然是假的。
这是我的完整代码:
const filter = (m) => m.author.bot === false;
await ogMessage.author.dmChannel
.awaitMessages(filter,
max: 1,
time: 60000,
)
.then((collected) =>
if (clans[parseInt(collected.toJSON()[0].content) - 1])
let clan = clans[parseInt(collected.toJSON()[0].content) - 1];
let data = fs.readFileSync(pathToCsv, "utf8");
console.log(typeof clan);
// let reg = new RegExp(clan, "g");
// let count = (data.match(reg) || []).length;
if (data.split(",").includes(clan))
ogMessage.author.send(
"People from this clan are already registered!\nPlease contact the hosts for help!"
);
return;
else
teamCheck = true;
else
ogMessage.author.send("Invalid Clan! Please try again!");
return;
)
.catch((collected) =>
try
console.log("Error" + collected);
catch (e)
console.log(e);
);
if (teamCheck === false)
return;
我尝试使用正则表达式拆分数据,但似乎对返回的字符串不起作用
readFileSync()
PS。我正在制作一个不和谐的机器人。
【问题讨论】:
在您提供的数据示例中,pm
前面有一个空格。
pm前的空格其实应该是换行,我会在问题里更新一下
试试data.split(",").map(it => it.trim()).includes(clan)
它不起作用:(正如我之前提到的,在 pm 之前有一个换行符
你能发布console.log(data)
和console.log(clan)
的输出吗?
【参考方案1】:
在源字符串中,pm
前面有一个空格。这就是为什么在调用 split(","
之后,结果数组中的元素 " pm"
和“pm”不等于它。
您只需要在其中搜索一些字符串之前修剪所有元素中的空格
【讨论】:
实际上它应该是pm
之前的新行,由于某种原因它没有正确显示在问题中,但即使我做了一个简单的data.includes("pm")
,它仍然没有工作,但字符串中有 pm 对吗?
var a = 'clan,mem1,mem2,mem3,mem4,language,managerID,serverJoinedDate pm, pm'
和 a.toString().includes('pm')
返回 true
是的,但在我的情况下它返回 false【参考方案2】:
问题出在氏族数组中。 我是这样定义的:
var clans = fs.readFileSync(pathToData, "utf8").split("\n");
但问题是readFileSync()
方法在数组的每个字符串之后添加了一个"\r"
。这就是为什么它无法将氏族字符串与数据匹配
那么有效的是var clans = fs.readFileSync(pathToData, "utf8").split("\r\n");
现在,数组只包含字符串,includes() 方法可以找到匹配项!
【讨论】:
以上是关于无法对 fs.readFileSync() 返回的字符串运行 includes() 方法的主要内容,如果未能解决你的问题,请参考以下文章
节点 fs.readFileSync 返回一个 uInt8 数组而不是原始缓冲区数组?
JS:为什么fs.readFileSync()返回缓冲区,即使我之前使用toString()将其转换为字符串?