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

时间:2016-07-07 18:28:55

标签: javascript node.js

我需要一个客户端来上传文本文件。然后我想解析文本文件,使得只有单词" object"在它中是文本文件中唯一剩下的东西。我已经成功编写了上传部分。但是需要帮助编码如何使用" object"来解析行。不在里面。我的节点js代码如下。

2 个答案:

答案 0 :(得分:1)

您可以使用Node核心部分的ReadLine API逐行遍历文件。您可以使用string.includes()来确定您的行是否包含您要查找的词组。

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);
  });

答案 1 :(得分:0)

步骤:1

使用 -

划分线条
var x='i am object\ni m object';
var arr = x.split('\n');

步骤:2

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

var reg = /object/g
if(reg.test(<eachline>)){
   // write new line
}else{
  // do nothing
}