Javascript 如何从节点js上上传的txt文件中读取特定数据

Javascript 如何从节点js上上传的txt文件中读取特定数据,javascript,node.js,Javascript,Node.js,我需要一个客户端来上传一个文本文件。然后我想解析文本文件,这样文本文件中只剩下带有单词“object”的行。我已经成功地编码了上传部分。但是需要帮助编码如何解析不包含“object”的行。下面是我的节点js代码 步骤:1 使用-- 步骤:2 对于每一行,使用对象regexp进行测试 var reg = /object/g if(reg.test(<eachline>)){ // write new line }else{ // do nothing } var reg=/

我需要一个客户端来上传一个文本文件。然后我想解析文本文件,这样文本文件中只剩下带有单词“object”的行。我已经成功地编码了上传部分。但是需要帮助编码如何解析不包含“object”的行。下面是我的节点js代码

步骤:1

使用--

步骤:2

对于每一行,使用对象regexp进行测试

var reg = /object/g
if(reg.test(<eachline>)){
   // write new line
}else{
  // do nothing
}
var reg=/object/g
if(reg.test()){
//写新行
}否则{
//无所事事
}
您可以使用节点核心的一部分来逐行迭代文件。您可以使用来确定行中是否包含要查找的短语

var readline = require('readline');
var fs = require('fs');

function filterFile(phrase, input) {
    return Promise((resolve, reject) => {
        var lines = [];
        let rl = readline.createInterface({
            input: input
        });

        rl.on('line', (line) => {
            if (line.includes(phrase, 0))
                lines.push(line);
        });

        rl.on('close', () => {
            let filteredLines = Buffer.from(lines);

            return resolve(fs.createReadStream(filteredLines));
        });

        rl.on('error', (err) => {
            return reject(err);
        });
    });
}

编辑过滤输出写入流示例 我们可以获取由
filterFile()
返回的结果流,并将其内容导入一个新文件,如下所示

var saveDest = './filteredLines.txt');

filterFile('object', inputStream)
  .then((filteredStream) => {
    let ws = fs.createWriteStream(saveDest);

    filteredStream.once('error', (err) => {     
      return Promise.reject(err);
    });

    filteredStream.once('end', () => {
      console.log(`Filtered File has been created at ${saveDest}`);
      return Promise.resolve();
    });

    filteredStream.pipe(ws);
  });

完美答案,只需确保输入为input:fs.createReadStream(uu dirname+/uploads/'+filename),因为在我的代码中,fstream是一个写流。@Baner看到我的更新,我将readline包装在一个承诺返回函数中,该函数使用一个短语进行过滤,并使用一个输入流,它以流的形式返回过滤后的行。如果发生错误,它将可读或拒绝。是的,谢谢您的回答。然而,就我所知,第二个参数是什么?includes(短语,0)。0是什么意思?@Baner,0是字符串中开始搜索匹配文本的索引。有没有办法说如果一行不包含此内容,请按一下?
var saveDest = './filteredLines.txt');

filterFile('object', inputStream)
  .then((filteredStream) => {
    let ws = fs.createWriteStream(saveDest);

    filteredStream.once('error', (err) => {     
      return Promise.reject(err);
    });

    filteredStream.once('end', () => {
      console.log(`Filtered File has been created at ${saveDest}`);
      return Promise.resolve();
    });

    filteredStream.pipe(ws);
  });