こたつとみかんとプログラミング

33才実務未経験ですがウェブエンジニアにジョブチェンジするために勉強したことをアップするためのブログです。

ruby の標準入力と出力

久々に paiza で ruby の問題を解いたのだが、結構忘れていたので振り返られるようにメモ。

ruby

1行に1要素だけ存在する場合

# 標準入力
Tokyo
line = gets
p line
# 出力結果
"Tokyo"

1行に複数要素が存在する場合

# 標準入力
Tokyo Nagoya Osaka
line = gets.split(" ")
p line
# 出力結果
["Tokyo", "Nagoya", "Osaka"]

gets は一行読み込んで、読み込みに成功した時にはその文字列を返す。
split は指定されたセレクタで分割し、配列で返す。

複数行に一つずつ要素が存在する場合

# 標準入力
Tokyo
Nagoya
Osaka
line = readlines.map(&:chomp)
p line
# 出力結果
["Tokyo", "Nagoya", "Osaka"]

readlines はすべての行を読み取り、1行ごと配列に格納する。
また、map を使って配列のすべての要素に chomp で改行なしにしている。

複数行に複数要素が存在する場合

# 標準入力
Tokyo Nagoya Osaka
Japan Korea China
lines = []
while line = gets
    lines << line.chomp.split(' ')
end

p lines
# 出力結果
[["Tokyo", "Nagoya", "Osaka"], ["Japan", "Korea", "China"]]

while line = gets ですべての行を取得するまで繰り返し…している。

参考記事
Ruby 標準入力から値を受け取る方法 - Qiita
IO#gets (Ruby 2.7.0 リファレンスマニュアル)
IO.readlines (Ruby 2.7.0 リファレンスマニュアル)