readline
모듈은 한 번에 한 줄씩 읽기 가능한 스트림(예: process.stdin)에서 데이터를 읽이 위한 인터페이스를 제공한다.readline.Interface
클래스의 인스턴스는 readline.createInterface()
메서드를 사용하여 생성된다. 모든 인스턴스는 입력 가능한 input
스트림과 출력 가능한 output
메서드와 연동된다.line 이벤트
close 이벤트
//readline 모듈을 로드하고 최초에는 createInterface를 통해 input을 생성한다.
const rl = require('readline').createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on('line', (line) => {
console.log(line);
rl.close();
}).on('close', () => {
process.exit();
});
const rl = require('readline').createInterface({
input: process.stdin,
output: process.stdout,
});
const list = [];
rl.on('line', (line) => {
//rl.close()가 없어서 엔터를 눌러 줄이 바뀌어도 계속 입력된다.
//로컬에서 강제로 중지하려면 Ctrl+C나 Ctrl+D
//한 줄에 입력된 값을 한 칸 띄어쓰기 기준으로 배열에 push
list.push(line.split(' '));
}).on('close', () => {
//코드작성구간시작
console.log(list);
//코드작성구간끝
process.exit();
});
rl.question(query[,options], callback)
query
에는 string으로 질문을 쓰며, 이 내용은 프롬프트 창에 출력된다.callback함수
는 사용자의 입력으로 유발된다.const rl = require('readline').createInterface({
input: process.stdin,
output: process.stdin,
});
r;.question('What is your favorite food? ', (answer) => {
console.log(`Oh, so your favorite food is ${answer}`);
//여기에는 넣지 않았지만 콘솔창에 입력을 그만받고 싶다면 마찬가지로 close()를 해야 한다.
});
rl.question(
'★ 사다리꼴의 윗변, 아랫변, 높이를 순서대로 띄어쓰기하여 한줄로 입력해주세요.\n',
(sizes) => {
const sizeArray = sizes
.trim()
.split(' ')
}
);
가장 쉬운 방법은 fs.ReadStreamAPI와 for await...of루프를 활용하는 것이다.
const fs = require('fs');
const readline = require('readline');
async function processLineByLine() {
const fileStream = fs.createReadStream('input.txt');
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
// Note: we use the crlfDelay option to recognize all instances of CR LF
// ('\r\n') in input.txt as a single line break.
for await (const line of rl) {
// Each line in input.txt will be successively available here as `line`.
console.log(`Line from file: ${line}`);
}
}
processLineByLine();
또는 'line'이벤트를 사용할 수 있다 .
const fs = require('fs');
const readline = require('readline');
const rl = readline.createInterface({
input: fs.createReadStream('sample.txt'),
crlfDelay: Infinity
});
rl.on('line', (line) => {
console.log(`Line from file: ${line}`);
});
더 자세한 내용은 nodeJS 문서에서 확인할 수 있다.
https://nodejs.org/api/readline.html#readline