コンソールから入力
基本は,
- readline() で文字列を読む。
- 複数のフィールドがあるなら,split(文字列)でフィールドを分ける。
- 分割された文字列を,整数に変換するには parse(Int, 文字列),実数に変換するには parse(Float64, 文字列)。
- 複数の整数,実数変換は parse.() のようにドット記法を使う。
- 変換された要素を配列(ベクトル)に代入,または複数の変数に代入する。
文字列として 1 行入力
入力:"abcdefg 12345"
s = readline() # "abcdefg 12345"
区切り文字で区切って複数の文字列として配列(ベクトル)へ入力
デフォルトでは空白区切り
入力:"abcdefg 12345"
s = split(readline()) # 要素数 2 のベクトル: "abcdefg", "123"
カンマで区切るとき
入力:"123,456,789"
s = split(readline(), ",") # 要素数 3 のベクトル: "123", "456", "789"
複数の変数へ入力
入力:"123 456 789"
a, b, c = split(readline()) # 3 変数へ入力: "123", "456", "789"
a # "123"
b # "456"
c # "789"
1 行に整数 1 つ
入力:"12345"
n = parse(Int, readline()) # 12345
1 行に実数 1 つ
入力:"12345"
f = parse(Float64, readline()) # 12345.0
入力:"12.345"
f = parse(Float64, readline()) # 12.345
複数の整数を複数の変数へ入力
入力:"12345 67890 11 22"
i, j, k, l = parse.(Int, split(readline())) # i = 12345, j = 67890, k = 11, l = 22
複数の実数を複数の変数へ入力
入力:"0.12 4e2 -3.5e-3"
a, b, c = parse.(Float64, split(readline())) # a = 0.12, b = 400.0, c = -0.0035
複数の整数を配列(ベクトル)へ入力
入力:"12345 67890 11 22"
n = parse.(Int, split(readline())) # 要素数 4 のベクトル: 12345, 67890, 11, 22
複数の整数を配列(ベクトル)へ入力する(リスト内包表記; 非推奨)
入力:"23 45 67"
m = [parse(Int, x) for x in split(readline())] # 23, 45, 67
複数の実数を配列(ベクトル)へ入力
入力:"0.12 4e2 -3.5e-3"
f = parse.(Float64, split(readline())) # 要素数 3 のベクトル: 0.12, 400.0, -0.0035
複数の実数を配列(ベクトル)へ入力する(リスト内包表記; 非推奨)
入力:"23 45 67"
g = [parse(Float64, x) for x in split(readline())] # 23.0, 45.0, 67.0
読み込む変数の型が複数あるとき(文字列,整数,実数が混ざっているとき)
入力:"abc 123 45.67"
a, b, c = split(readline())
a # "abc"
b = parse(Int, b) # 123
c = parse(Float64, c) # 45.67
文字列を入力する(split() しない)と文字に分解されて集合に読み込まれる
入力:"qwretudhddhdhshkfh"
s = Set(readline()) # 'f', 'w', 'd', 'e', 'h', 's', 'u', 'r', 't', 'k', 'q'
文字列として集合に読み込ませるには,split() する
入力:"abc 123 *&* @@"
s2 = Set(split(readline())) # "abc", "*&*", "@@", "123"
複数行からの入力
1 行に 1 個ずつの整数を n 個(n 行から)入力する
n = 4 # これも入力するなら n = parse(Int, readline())
入力:
"123"
"456"
"789"
"111"
m = [parse(Int, readline()) for s in 1:n] # 123, 456, 789, 111
実数の入力なら parse(Float64, readline()),
文字列そのままを入力するなら readline() のまま
1 行に複数個の整数,別々の配列(ベクトル)の要素として入力
入力:
"1 2 3"
"4 5 6"
"7 8 9"
"0 1 2"
n = 4
a = zeros(Int, n)
b = zeros(Int, n)
c = zeros(Int, n)
for i = 1:n
a[i], b[i], c[i] = parse.(Int, split(readline()))
end
a # 1, 4, 7, 0
b # 2, 5, 8, 1
c # 3, 6, 9, 2
1 行に複数,入力の都度,処理
n = 5
for i = 1:n
a, b, c = parse.(Int, split(readline()))
# a, b, c を使用する処理
end
2 次元配列(行列)へ入力
n x m 行列に読み込む。入力時には m の情報は使わない。1 行当たりの入力個数に注意。
入力:
"1 2 3 4 5"
"6 7 8 9 10"
"11 12 13 14 15"
n, m = 3, 5
A = zeros(Int, n, m)
for i =1:n
A[i, :] = parse.(Int, split(readline()))
end
A
# 3×5 Array{Int64,2}:
# 1 2 3 4 5
# 6 7 8 9 10
# 11 12 13 14 15
特定の文字列を読むまで繰り返し入力
入力:
"1"
"2"
"3"
"finish"
s = 0
while true
e = readline()
e == "finish" && break
s += parse(Int, e)
end
s # 6
空行が入力されるまで繰り返し入力
入力:
"1"
"2"
"3"
"finish"
s = 0
while true
try
e = readline()
s += parse(Int, e)
catch
break
end
end
s # 6