我正在使用 node.js 制作一个不和谐的机器人,并且我有一个包含 3 行的 .txt 文件:
User1|421
User2|5543
User3|12
我只想解析“|”之后的数字,我已经使用了
fs.readFile('balance.txt', 'utf8', function(err, contents) {
message.channel.sendMessage(contents);
})
要从中获取文本,我想要做的是检查发送请求检查余额的用户是否存在于列表中,如果存在则打印出余额。
我希望输入为
!余额
输出为
$43
检查时:
用户存在? 获取用户所在行 获取“|”后的数字并将其存储在临时变量中以进行打印
谢谢!
最佳答案
我会尝试这种方法,将该文件读入内存并为其创建一个访问器函数:
const fs = require("fs");
const os = require('os');
fs.readFile('balance.txt', 'utf8', function(err, contents) {
if (err) {
console.error("Error occurred: ", err);
} else {
let balancesDetails = getUserBalances(contents);
let user3BalanceDetails = balancesDetails.find(result => result.user === "User3");
console.log("User 3 balance: ", user3BalanceDetails.balance);
// Send the balance if required
//message.channel.sendMessage(user3BalanceDetails.balance);
}
});
function getUserBalances(fileContents) {
return fileContents.split(os.EOL).map(line => line.split("|")).map(([user, balance]) => { return { user, balance: parseFloat(balance)} });
}
在纯 JavaScript 中工作的示例如下(唯一真正的区别是我们不能使用 OS 对象,因为这只是 Node.js!):
let contents = `User1|421\nUser2|5543\nUser3|12`;
function getUserBalanceArray(fileContents) {
return fileContents.split('\n').map(line => line.split("|")).map(([user, balance]) => { return { user, balance: parseFloat(balance)} });
}
function getUserBalanceMap(fileContents) {
return fileContents.split('\n').map(line => line.split("|")).reduce((map, [user, balance]) => { map[user] = parseFloat(balance);
return map }, {});
}
console.log("File contents:\n" + contents);
console.log("Balance array: ", getUserBalanceArray(contents));
console.log("Balance map: ", getUserBalanceMap(contents));
关于node.js - 在discord bot (node.js) 中逐行解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56767792/