Maison  >  Questions et réponses  >  le corps du texte

Est-il possible d'utiliser readline pour diffuser les entrées de la console ? (Node.js, JS)

J'ai un tableau conditionnel ARR et je souhaite y écrire des valeurs sur une seule ligne

J'essaie de faire ça

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('')

Mais quand je fais cela, j'obtiens une entrée ligne par ligne :

Enter Values:
    1
    A
    2
    B

J'ai besoin de :

Enter Values: 1 A 2 B

P粉868586032P粉868586032263 Il y a quelques jours449

répondre à tous(1)je répondrai

  • P粉457445858

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

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

    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);
    

    répondre
    0
  • Annulerrépondre