目的
JavaScriptにてpaizaの問題を解いた際、
冒頭の一文に記載されている内容が気になったため、
調査した結果を記載する
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
console.log(lines)
}
左から順に一文が読み込まれる
公式が実装している決まりみたいなもの
process.stdin.resume()
この行がないと、プログラムは標準入力からのデータを受け取ることができない。
-
process
Node.jsのprocessモジュールを使うと、nodeに関連する情報を取得したり、
nodeの動作を制御したりすることができる。 -
stdin
標準入力(standard input)のこと。コンピュータ上で実行されているプログラムが、
特に何も指定されていない場合に標準的に利用するデータ入力元。
システム上では “stdin” の略号で表されることが多い。 -
resume()
上記設定を動作させる箇所 -
setEncoding("utf8")
標準入力のエンコーディングをUTF-8に設定。
これにより、受け取るデータがUTF-8形式の文字列として解釈される。
require("readline")
-
require()
commonJSの仕様の一つ
外部ライブラリを参照する方法が、各JSファイルをモジュール化しておいて、
使うときはrequire()で読み込む -
readlineモジュールとは
ユーザーからの入力を簡単に受け取るための、Node.jsの標準モジュール(関連した機能を持った変数や関数を一つのまとまりにした記法)
Node.jsを使う際、.txtファイルや.csvファイルを一行ずつ読み込みたい場合があり、
そんな時に使えるのがreadlineモジュール。
Node.jsで標準に備えられている。
createInterface()メソッド
標準入力と標準出力を使うインターフェースを作成
-
インターフェイス
概念的に共通した部品と機能の集まり -
input
監視する入力ストリーム (必須)。 -
output
読み込んだデータを書くための出力ストリーム (必須) -
stdout
コンピュータ上で実行されているプログラムが、
特に何も指定されていない場合に標準的に利用するデータ出力先。
システム上では “stdout” の略号で表されることが多い。
reader.on以降
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
console.log(lines)
});
reader.on('line', (line) => {
lines.push(line);
});
lines配列に、標準入力から渡されたデータが入る
- on メソッド
データが入力されたときの動作を(無名関数を渡すことで)指定している。
reader.on('close', () => {
console.log(lines)
});
受け取ったデータを使って処理
参考文献
https://qiita.com/Molly95554907/items/fddb0a426f9e01d50663
https://qiita.com/ameRese/items/6428482ba94218c625e5
https://information-channel.officialblog.jp/archives/30475181.html
http://www2.nagano.ac.jp/hiraoka/PL/l/js.1.html
https://qiita.com/kaz2ngt/items/dabbfa2d20a328722ca2
https://zenn.dev/ebi_yu/scraps/db4c7d1f3e883a
https://zenn.dev/ojk/articles/js-interface
https://qiita.com/uryyyyyyy/items/b10b012703b5396ded5a
https://e-words.jp/w/%E6%A8%99%E6%BA%96%E5%87%BA%E5%8A%9B.html
https://openpne.sakura.ne.jp/nodejs.org_ja/api/readline.html#readline_rl_close