You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js的discord.js环境中如何提取文件内包含指定字符串的行?

Node.js 按行筛选文件内容实现方案

以下分两种场景提供可直接运行的实现代码:

场景1:处理小体积文件(推荐小于100MB)

直接一次性读取文件内容拆分过滤,写法简单高效:

const fs = require('fs');
const path = require('path');

// 自定义配置
const targetFilePath = path.join(__dirname, '替换为你的实际文件路径.txt');
const targetString = '替换为你要搜索的目标字符串';

// 异步读取(推荐,不阻塞事件循环,适合discord.js运行环境)
fs.readFile(targetFilePath, 'utf8', (err, fileContent) => {
  if (err) {
    console.error('文件读取失败:', err);
    return;
  }
  // 兼容Windows/macOS/Linux换行格式拆分出行数组
  const lines = fileContent.split(/\r?\n/);
  // 过滤出包含目标字符串的行并输出
  lines.filter(line => line.includes(targetString))
    .forEach(line => console.log(line));
});

如果需要同步读取可以用以下简化写法:

try {
  const content = fs.readFileSync(targetFilePath, 'utf8');
  content.split(/\r?\n/)
    .filter(line => line.includes(targetString))
    .forEach(line => console.log(line));
} catch (err) {
  console.error('文件读取失败:', err);
}

场景2:处理大体积文件(大于100MB)

使用readline模块逐行读取,不会一次性加载整个文件到内存,避免内存溢出:

const fs = require('fs');
const path = require('path');
const readline = require('readline');

const targetFilePath = path.join(__dirname, '替换为你的大文件路径.txt');
const targetString = '替换为你要搜索的目标字符串';

const rl = readline.createInterface({
  input: fs.createReadStream(targetFilePath, 'utf8'),
  crlfDelay: Infinity // 自动兼容所有换行格式
});

rl.on('line', (line) => {
  if (line.includes(targetString)) {
    console.log(line);
  }
});

rl.on('error', (err) => console.error('文件读取失败:', err));
rl.on('close', () => console.log('文件扫描完成'));

补充说明

  • 如果需要大小写不敏感匹配,把判断逻辑改为line.toLowerCase().includes(targetString.toLowerCase())即可
  • 在discord.js的事件回调中使用时,优先选择异步或者逐行读取方案,避免阻塞机器人的消息响应

内容的提问来源于stack exchange,提问作者some kid playing js

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:36:10