这种简单的串联有什么问题

时间:2018-07-01 02:41:25

标签: javascript node.js

我只是想使用Node.js将文本文件中的几行文本连接起来。 结果和预期结果如下所示,并不相同。我不确定为什么要得到我要得到的结果,它似乎覆盖了前一行。

  

目标:合并行和同一行中的以下子项

app.js

   'use strict'
    const fs = require('fs')

    let targetRegex = /Line.*/;
    let concatStatement = '';

    fs.readFileSync('input.txt').toString().split('\n')
        .forEach(function (line) {

            if (targetRegex.test(line)) {
                concatStatement = line;
            }
            else {
                concatStatement += line
                console.log(concatStatement);

            }
        });

input.txt

Line11
SubA
Line22
SubB

结果

SubA11
SubB22

预期

Line11SubA
Line22Subb

1 个答案:

答案 0 :(得分:1)

我在ubuntu上试用了该程序,并产生了您期望的输出。

您可能遇到的问题是,在forEach的每次迭代中都将返回的行变量在开始时有回车符,因此它会覆盖字符。

我通过有意在行变量的开头添加回车符来验证这一点,并开始产生您要获得的输出。

'use strict'
 const fs = require('fs')

 let targetRegex = /Line*/;
 let concatStatement = '';

 fs.readFileSync('input.txt').toString().split('\n')
.forEach(function (line) {
    line = '\r' + line

    if (targetRegex.test(line)) {
        concatStatement = line;
    }
    else {
        concatStatement += line
        console.log(concatStatement);

    }
});

这产生

SubA11
SubB22

如果我对此行发表评论

line = '\r' + line

然后它会在我的平台上产生您期望的输出。

解决方案

要解决此问题,可以检查input.txt文件的行分隔符,并使用正确的分隔符作为文本分隔符。