Heim  >  Fragen und Antworten  >  Hauptteil

Ist es möglich, readline zum Streamen von Eingaben von der Konsole zu verwenden? (Node.js, JS)

Ich habe ein bedingtes Array ARR und möchte darin Werte in einer Zeile schreiben

Ich versuche das zu tun

import * as readline from 'node:readline/promises';
import { stdin as input, stdout as output } from 'process';

const rl = readline.createInterface({input, output})

let arr =[]
console.log('Enter Values: ')
for (let i = 0; i < 5; i++) {
     arr[i] = await rl.question('')

Aber wenn ich das mache, erhalte ich eine zeilenweise Eingabe:

Enter Values:
    1
    A
    2
    B

Ich brauche:

Enter Values: 1 A 2 B

P粉868586032P粉868586032263 Tage vor451

Antworte allen(1)Ich werde antworten

  • P粉457445858

    P粉4574458582024-02-22 12:09:45

    readline 用换行符分隔输入流,但您想用空格分隔它。下面的转换流可以实现这一点。请注意,它是与 for wait (...) {} 而不是 for (...) { wait } 一起使用的。

    var input = new stream.Transform({
      readableObjectMode: true,
      transform(chunk, encoding, callback) {
        this.buffer = this.buffer ?
          Buffer.concat([this.buffer, chunk], this.buffer.length + chunk.length) :
          chunk;
        while (true) {
          var offset = this.buffer.indexOf(" ");
          if (offset === -1) break;
          this.push(this.buffer.toString("utf8", 0, offset));
          while (this.buffer[offset + 1] === 0x20) offset++;
          this.buffer = this.buffer.slice(offset + 1);
        }
        callback();
      }
    });
    console.log('Enter Values: ');
    process.stdin.pipe(input);
    let arr = [];
    let i = 0;
    for await (var number of input) {
      arr[i] = number;
      i++;
      if (i >= 5) break;
    }
    console.log(arr);
    

    Antwort
    0
  • StornierenAntwort