Поиск в ini файле
я создаю бота, используя discord.js.
Как мне сделать поиск по ini файлу?
Пробую такой код
const fs = require('fs');
const ini = require("ini");
const filePath = ini.parse(fs.readFileSync(file.ini, 'utf-8'));
if(filePath.name === args[0])
return message.channel.send('Данное имя уже занято');
ini файл:
[id1]
name=test
[id2]
name=file
[id2]
name=safe
Ответы (2 шт):
Автор решения: nörbörnën
→ Ссылка
readline - модуль, который обеспечивает интерфейс для считывания данных из Readable потока (например process.stdin) на одну строку за один раз.
// @ts-check
const path = require('path');
const fs = require('fs');
const readline = require('readline');
(async () => {
const checkName = process.argv[process.argv.length - 1];
const check = await findByName(checkName);
console.log(`Name "${checkName}" is ${check ? 'exists' : 'not exists'}`);
})();
/**
* @param {string} checkName
* @returns {Promise<boolean>}
*/
async function findByName(checkName) {
const fileStream = fs.createReadStream(path.join(__dirname, '../db.ini'));
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
const searchPattern = `name=${checkName}`;
let check = false;
for await (const line of rl) {
if (line.startsWith(searchPattern)) {
check = true;
break;
}
}
return check;
}
db.ini
[id1]
name=test
[id2]
name=file
[id2]
name=safe
Автор решения: vp_arth
→ Ссылка
const fs = require('fs')
, ini = require('ini')
const config = ini.parse(fs.readFileSync('./users.ini', 'utf-8'))
console.log(config)
// { id1: { name: 'test' }, id2: { name: 'safe' } }
const name = 'safe'// args[0]
for (const [key, section] of Object.entries(config)) {
if (section.name === name) {
throw new Error(`Name «${name}» already exists`)
}
}
https://repl.it/repls/VirtualConfusedSandbox
Секция с name=file у вас некорректная и замещается следующей с тем же именем(id2). Поэтому имя file найдено не будет