读取 node.js 中的多行

Reading multiple lines in node.js

我目前正在 Kattis 进行一些测试以练习我的 node.js 技能,但我被卡住了 with this one

下面是我的代码:

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
  
rl.on("line", (line) => {
  let inputData = line.split("/n");
  console.log(inputData[0].length);

  // result = (inputData[0].length) >= (inputData[1].length) ? 'go' : 'no';
  // console.log(result)
});

..并且在控制台日志 inputData[0].length 中,我得到:

4
6

当我使用 inputData[1] 时,它给我未定义。我如何比较这两行,以便 'go''no' 将显示为结果?

根据定义,您可以使用此界面一次获得一行。 readline 界面中的 line 事件一次只给你一行。所以,它永远不会给你两行你可以比较。

如果您只想查看文件中连续行与您想要的任何逻辑的比较,您可以将上一行保留在更高范围的变量中,并将下一行与下一个 line 事件时的行进行比较发生。

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let previousLine = "";
  
rl.on("line", (line) => {
    if (!previousLine) {
        // no previous line to compare to, so just remember this line
        previousLine = line;
    } else {
        let result = previousLine.length >= line.length ? 'go' : 'no';
        console.log(result);
        previousLine = line;
    }
});

但是,正如我在评论中多次说过的那样,如果您告诉我们您正在尝试解决什么实际问题或您真正想要完成什么,那么我们很可能可以帮助您解决实际问题的好方法。

这里有一些解决此问题的简单解决方案,以帮助说明 readline Kattis 中的管理,这可能有点棘手:

使用.on("close", ...)

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
  
const lines = [];
rl.on("line", line => lines.push(line))
  .on("close", () =>
    console.log(lines[0].length < lines[1].length ? "no" : "go")
  )
;

使用.once("line", ...):

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
  
rl.once("line", line1 =>
  rl.once("line", line2 =>
    console.log(line1.length < line2.length ? "no" : "go")
  )
);

另请参阅 Getting input in Kattis challenges - readline js 了解更复杂的情况,您需要阅读 n 行或直到 EOF 才能解决问题。