Nodejs - 如何将函数应用于两个流的每一行组合?

血腥

我正在流式传输两个无法放入内存的大文件,我需要逐行比较这两个文件并应用需要积累一些信息的比较函数。

假设我有两个流:const stream1, stream2. 还有一些我需要积累的结果。例如,假设它是两个文件中相同位置相同行数的计数:let count.

这是我尝试的方法:

const stream1 = getLineByLineReadable1Somehow(), stream2 = getLineByLineReadable2Somehow();

let count = 0;

stream1.on('readable', () => {
    stream2.on('readble', () => {
        let line1, line2;
        while (line1 = stream1.read()) {
            line2 = stream2.read();
            if (line1 !== line2) count++;
        }
    });
});

console.log(count);

只要这两个文件很小,这就可以正常工作,但是当文件变大时就完全崩溃了。最后提供的计数不正确。不确定发生了什么,但我认为这与readable两个流之一被多次触发事件有关。在某些时候,两个流中的一个会暂时吐出一堆null

感谢您对此事的任何帮助。谢谢!

标准数据库--

问题是在大文件中,新行到达的事件可能非常不规则。所以有必要有一个中间缓冲区。这是一个工作片段:

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

var rs1 = fs.createReadStream('1.log');
var r1 = readline.createInterface({
    input: rs1
});

var rs2 = fs.createReadStream('2.log');
var r2 = readline.createInterface({
    input: rs2
});

var stats = {
    count: [0, 0],
    common: 0,
    closed: 0,
    lines: [
        [],
        []
    ]
}

function compare(line, i) {
    stats.count[i]++;
    if (stats.closed === 0 || stats.lines[1 - i].length > 0) stats.lines[i].push(line);
    while (stats.lines[0].length > 0 && stats.lines[1].length > 0) {
        var L1 = stats.lines[0].shift();
        var L2 = stats.lines[1].shift();
        if (L1 === L2) stats.common++;
    }
}

function close() {
    if (++stats.closed === 2) console.log(stats.count, stats.common, stats.lines[0].length, stats.lines[1].length);
}

r1.on('line', (line) => compare(line, 0))
r2.on('line', (line) => compare(line, 1))

r1.on('close', close);
r2.on('close', close);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将函数应用于熊猫中每一行的对象属性

来自分类Dev

如何将函数应用于SparkR中的每一行?

来自分类Dev

将函数应用于ndarray的每一行

来自分类Dev

将函数应用于ndarray的每一行

来自分类Dev

如何将功能应用于每一行?

来自分类Dev

在熊猫中,如何将函数应用于返回两列的每一列

来自分类Dev

sed将两个搜索条件应用于一行,然后替换

来自分类Dev

如何将函数应用于数组并形成两个单独的数组?

来自分类Dev

R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

来自分类Dev

如何使用来自另一个矩阵对应行的参数将函数应用于矩阵的每一行

来自分类Dev

创建一个将方程式应用于每一行的用户定义函数

来自分类Dev

如何将pv.uneven(FinCal库)(或任何带有向量作为输入的函数)应用于数据帧的每一行?

来自分类Dev

如何将不同的多参数函数应用于data.table的每一行?

来自分类Dev

如何将矩阵变换有效地应用于NumPy数组的每一行?

来自分类Dev

如何将矩阵变换有效地应用于NumPy数组的每一行?

来自分类Dev

如何将CDB调试器命令应用于文件中的每一行?

来自分类Dev

jQuery:如何将模糊功能应用于每一行的第四列

来自分类Dev

使用EPPlus将公式应用于每一行的两列中的值相乘

来自分类Dev

将功能分别应用于每一行

来自分类Dev

将多个函数应用于numpy数组的每一行

来自分类Dev

将数学函数应用于大文件中的每一行

来自分类Dev

Pandas_udf 问题:将函数应用于数据为 ArrayType 的每一行

来自分类Dev

如何将函数列表中的每个函数应用于Haskell中一行中的值

来自分类Dev

熊猫的DataFrame重复每一行,将更改应用于重复项,然后组合回一个数据帧

来自分类Dev

如何通过R下的for循环将Wilcoxon测试应用于矩阵的每一行

来自分类Dev

R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

来自分类Dev

R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

来自分类Dev

如何将lambda应用于每个数据帧行,以便测试两个条件?

来自分类Dev

NodeJS:如何在控制台中的每一行之后禁用自动输出?

Related 相关文章

  1. 1

    如何将函数应用于熊猫中每一行的对象属性

  2. 2

    如何将函数应用于SparkR中的每一行?

  3. 3

    将函数应用于ndarray的每一行

  4. 4

    将函数应用于ndarray的每一行

  5. 5

    如何将功能应用于每一行?

  6. 6

    在熊猫中,如何将函数应用于返回两列的每一列

  7. 7

    sed将两个搜索条件应用于一行,然后替换

  8. 8

    如何将函数应用于数组并形成两个单独的数组?

  9. 9

    R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

  10. 10

    如何使用来自另一个矩阵对应行的参数将函数应用于矩阵的每一行

  11. 11

    创建一个将方程式应用于每一行的用户定义函数

  12. 12

    如何将pv.uneven(FinCal库)(或任何带有向量作为输入的函数)应用于数据帧的每一行?

  13. 13

    如何将不同的多参数函数应用于data.table的每一行?

  14. 14

    如何将矩阵变换有效地应用于NumPy数组的每一行?

  15. 15

    如何将矩阵变换有效地应用于NumPy数组的每一行?

  16. 16

    如何将CDB调试器命令应用于文件中的每一行?

  17. 17

    jQuery:如何将模糊功能应用于每一行的第四列

  18. 18

    使用EPPlus将公式应用于每一行的两列中的值相乘

  19. 19

    将功能分别应用于每一行

  20. 20

    将多个函数应用于numpy数组的每一行

  21. 21

    将数学函数应用于大文件中的每一行

  22. 22

    Pandas_udf 问题:将函数应用于数据为 ArrayType 的每一行

  23. 23

    如何将函数列表中的每个函数应用于Haskell中一行中的值

  24. 24

    熊猫的DataFrame重复每一行,将更改应用于重复项,然后组合回一个数据帧

  25. 25

    如何通过R下的for循环将Wilcoxon测试应用于矩阵的每一行

  26. 26

    R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

  27. 27

    R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

  28. 28

    如何将lambda应用于每个数据帧行,以便测试两个条件?

  29. 29

    NodeJS:如何在控制台中的每一行之后禁用自动输出?

热门标签

归档