无法使用 Node.js 以正确的格式将块数据推送到数组中

Unable to push chunk data into array in proper format using Node.js

我正在尝试读取 txt 文件并使用 Node.js 将每个单词推送到数组中,但根据我的代码,它没有以正确的格式发生。我在下面解释我的 txt 文件。

CHANGES:

CHANGES
==============================
v2.2.3              11/06/2021

Changes:
- USxxxx abcd
- DExxxx xyz

===============================
v2.2.2               01/06/2021

Changes:
- USxxxx abcd
- DExxxx xyz

===============================
v2.2.1               20/05/2021

Changes:
- USxxxx abcd
- DExxxx xyz

===============================

我的代码如下。

reader = fs.createReadStream('../../../CHANGES');
 
// Read and display the file data on console
let arr = [];
reader.on('data', function (chunk) {
  arr.push(chunk.toString());
  //console.log('chunk', chunk.toString());
  console.log('chunk', arr);
});

这里我想把每个单词压入数组。但它给出了如下输出。

chunk [
  'CHANGES\n' +
    '==============================\n' +
    'v2.2.3              11/06/2021\n' +
    '\n' +
    'Changes:\n' +
    '- USxxxx abcd\n' +
    '- DExxxx xyz\n' +
    '\n' +
    '===============================\n' +
    'v2.2.2               01/06/2021\n' +
    '\n' +
    'Changes:\n' +
    '- USxxxx abcd\n' +
    '- DExxxx xyz\n' +
    '\n' +
    '===============================\n' +
    'v2.2.1               20/05/2021\n' +
    '\n' +
    'Changes:\n' +
    '- USxxxx abcd\n' +
    '- DExxxx xyz\n' +
    '\n' +
    '==============================='
]

我期望的格式应该如下所示。

[
  'CHANGES' ,
    'v2.2.3',
    '11/06/2021',
    'Changes'
    '- USxxxx abcd',
    '- DExxxx xyz',
    'v2.2.2 ',
    '01/06/2021'
    'Changes:',
    '- USxxxx abcd',
    '- DExxxx xyz',
    'v2.2.1',
    '20/05/2021',
    'Changes:',
    '- USxxxx abcd',
    '- DExxxx xyz'
]

这里 /n and + 正在添加,但我需要读取每个单词并推入数组。有人可以建议我如何解决这个问题吗?

您应该能够为此使用 Readline 模块,从文件流创建一个 readline 接口,例如:

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

const reader = readline.createInterface({
    input: fs.createReadStream('../../../CHANGES'),
});

// Skip empty lines and lines like '===='
function lineFilter(line) {
    return (line.length > 0) && (!line.includes('=================='));
}

async function readLines() {
    let arr = [];
    for await (let line of reader) {
        if (lineFilter(line)) {
            // Split version lines.
            if (/v\d\.\d\.\d/.test(line)) {
                line.split('           ').forEach(f => arr.push(f.trim()));
            } else { 
                arr.push(line);
            }
        }
    }
    console.log("Result:", JSON.stringify(arr, null, 2));
}

readLines();

我们将看到如下结果:

Result: [
  "CHANGES",
  "v2.2.3",
  "11/06/2021",
  "Changes:",
  "- USxxxx abcd",
  "- DExxxx xyz",
  "v2.2.2",
  "01/06/2021",
  "Changes:",
  "- USxxxx abcd",
  "- DExxxx xyz",
  "v2.2.1",
  "20/05/2021",
  "Changes:",
  "- USxxxx abcd",
  "- DExxxx xyz"
]