Julia - キーボードから入力を受ける

環境

  • OS: ArchLinux
  • Julia 1.0.5

※ 2019/12/22 Base.prompt の例を追加

キーボードからの入力

Python3でいうところの input はJuliaではBase.promptを使います。

julia> Base.prompt("What's your name?")
What's your name?: Bob # Bob と入力して Enter を押した。末尾の : は勝手につきます。
"Bob"

何も入力せずに Enter を押すと、空文字 "" が、Ctrl-D を押すと nothing が返ってきます。

julia> Base.prompt("What's your name?")
What's your name?:
""

julia> Base.prompt("What's your name?")
What's your name?:
julia> ans == nothing
true

default を設定すると、何も入力せずに Enter が押された場合 default に設定したあと値が返ってきます。

julia> Base.prompt("Are you Japanese?", default="yes")
Are you Japanese? [yes]:
"yes"

prompt を出さずに入力を受ける場合は readline() を使います。(Base.prompt も内部的には readline() を使っています。)

readline(io::IO=stdin; keep::Bool=false)
julia> a = readline()
hoge # hoge を入力後 Enter
"hoge"

julia> a = readline()
hoge piyo
"hoge piyo"

julia> split(a) # 文字列を分割する。カンマ , 区切りのときは split(a, ",") とする
2-element Array{SubString{String},1}:
 "hoge"
 "piyo"

julia> a = readline()
1
"1"

julia> parse(Int, a) # 整数に変換
1

julia> parse(Float64, a) # 浮動小数点に変換
1.0

任意の個数の入力を受ける

特定の文字が入力されたら停止する方法

0 が入力されたら停止させる例

julia> x = []
0-element Array{Any,1}

julia> while true
           a = readline()
           a == "0" && break
           push!(x, a)
       end
hoge
piyo
fuga
0

julia> println(x)
Any["hoge", "piyo", "fuga"]

Ctrl-D で停止する方法

readline で入力待ちの状態で Ctrl-D (EOF) をすると空の文字列 "" が代入されるので、それを終了条件に使います。

julia> x = []
0-element Array{Any,1}

julia> while (a = readline()) != "" # Base.prompt を使う場合は nothing を終了条件に使う。
           push!(x, a)
       end
hoge
piyo
fuga
      # <- ここで Ctrl-D をしている

julia> println(x)
Any["hoge", "piyo", "fuga"]