티스토리 뷰
(1) 출력
console.log( )
(2) 입력 : readline 모듈 이용하는 방법
const readline = require('readline');
const rl = readline.createInterface(process.stdin, process.stdout);
let input = [];
let eval = () => {
// Code
}
rl.on('line', function(line){
input.push(line);
}).on('close', eval);
readline 모듈
Readable 스트림으로부터 한 줄씩 읽어 들이는 인터페이스를 제공하는 모듈.
The readline module provides an interface for reading data from a Readable stream (such as process.stdin) one line at a time.
인터페이스 생성 ( createInterface )
2번째 줄 코드는 표준 입출력(키보드, 터미널 화면) 관련된 readline 인터페이스를 생성한다.
Instances of the readline.Interface class are constructed using the readline.createInterface() method.
Every instance is associated with a single input Readable stream and a single output Writable stream.
rl.on( '이벤트' , callback )
해당 이벤트 발생시 callback 함수를 호출한다.
- line 이벤트
한 줄씩 input 배열에 넣는다.
The 'line' event is emitted whenever the input stream receives an end-of-line input (\n, \r, or \r\n). This usually occurs when the user presses Enter or Return
- close 이벤트
readline 인터페이스가 한 번 생성되고 나면 이 인터페이스가 종료되기 전까지는 node 프로그램이 종료되지 않는다.
(계속 입력 기다림). 따라서 끝내려면 반드시 close 이벤트가 발생돼야 한다.
※ 콘솔에서 실행시 ctrl + c를 눌러서 close 이벤트를 발생시켜야 끝난다.
백준에서 같이 파일로 입력을 받을 경우는 파일 끝에 가면 EOF에 걸려 자동으로 close 이벤트가 발생한다.
(3) 입력 : File system 모듈 이용하는 방법
나는 백준에서 문제 풀때 readline 모듈 방식만 쓰는데 찾다 보니까 이 방법도 있더라. (근데 window라 안됨)
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split(' ');
//fs.readFile(path[, options], callback) 비동기
//fs.readFileSync(path[, options]) 동기
readFile VS readFileSync
기본적으로 파일에서 데이터를 읽는 메소드이다.
readFile : 비동기 방식. 파일 다 읽기 전에 다음 코드 실행하고, 다 읽었으면 등록한 callback 함수 실행
readFileSync : 동기 방식. 파일 다 읽은 후에 다음 줄 코드 실행.
파라미터
path : 파일명이나 파일 디스크립터.
유닉스 계열에서는 (리눅스, 맥) 표준 스트림 특수파일인 '/dev/stdin' '/dev/stdout' '/dev/stderr'가 있어서 이 방식으로 키보드 입력을 받으면 된다는데... 윈도우에서는 안된다!
options : encoding (예를 들면 'utf8') , flags (예를 들면 'r')
callback 함수 : 비동기 방식의 경우.
영어 설명 출처 : https://nodejs.org/api/readline.html
'시리즈 > Javascript' 카테고리의 다른 글
정규표현식 예제 (0) | 2021.02.20 |
---|---|
Map and Set (0) | 2021.02.20 |
String.prototype.replace() 함수 (0) | 2021.01.22 |
javascript 팁 (0) | 2021.01.21 |
[queue] javascript 효율적인 큐 (0) | 2021.01.13 |