Julia Language
入力
サーチ…
構文
- 読み込まれた行()
- readlines()
- readstring(STDIN)
- chomp(str)
- オープン(f、ファイル)
- 各行(io)
- readstring(file)
- 読み取り(ファイル)
- readcsv(ファイル)
- readdlm(ファイル)
パラメーター
パラメータ | 詳細 |
---|---|
chomp(str) | 文字列から末尾の改行を1つ削除します。 |
str | 末尾の改行を取り除くための文字列。 文字列は慣例によって不変であることに注意してください。この関数は新しい文字列を返します。 |
open(f, file) | ファイルを開き、関数を呼び出し、その後にファイルを閉じます。 |
f | ファイルを開くIOストリームを呼び出す関数が生成されます。 |
file | 開くファイルのパス。 |
標準入力からの文字列の読み取り
JuliaのSTDIN
ストリームは、 標準入力を参照します 。これは、ユーザー入力、対話式コマンド行プログラム、またはプログラムにリダイレクトされたファイルまたはパイプラインからの入力のいずれかを表すことができます。
readline
関数は、引数が与えられていないSTDIN
、改行がSTDIN
か、 STDIN
ストリームがファイルの終わりの状態になるまで、 STDIN
からデータを読み込みます。これらの2つの場合は、 \n
文字が最後の文字として読み取られたかどうかによって区別できます。
julia> readline()
some stuff
"some stuff\n"
julia> readline() # Ctrl-D pressed to send EOF signal here
""
多くの場合、対話型プログラムの場合、EOF状態は気にせず、ストリングだけが必要です。たとえば、入力を求めるプロンプトが表示されることがあります。
function askname()
print("Enter your name: ")
readline()
end
しかし、改行が追加されているため、これは十分満足できるものではありません。
julia> askname()
Enter your name: Julia
"Julia\n"
chomp
関数は、文字列から末尾の改行を1つ削除するために使用できます。例えば:
julia> chomp("Hello, World!")
"Hello, World!"
julia> chomp("Hello, World!\n")
"Hello, World!"
したがって、結果が期待どおりになるように、関数をchomp
拡張することができます。
function askname()
print("Enter your name: ")
chomp(readline())
end
これはより望ましい結果をもたらす:
julia> askname()
Enter your name: Julia
"Julia"
場合によっては、可能な限り多くの行を読み込みたい場合があります(入力ストリームがファイルの終わりの状態になるまで)。 readlines
関数はその機能を提供します。
julia> readlines() # note Ctrl-D is pressed after the last line
A, B, C, D, E, F, G
H, I, J, K, LMNO, P
Q, R, S
T, U, V
W, X
Y, Z
6-element Array{String,1}:
"A, B, C, D, E, F, G\n"
"H, I, J, K, LMNO, P\n"
"Q, R, S\n"
"T, U, V\n"
"W, X\n"
"Y, Z\n"
もう一度、 readlines
で読み込まれた行の最後に改行を嫌うなら、 chomp
関数を使ってそれらを削除することができます。今回は、 放送 chomp
アレイ全体の機能を:
julia> chomp.(readlines())
A, B, C, D, E, F, G
H, I, J, K, LMNO, P
Q, R, S
T, U, V
W, X
Y, Z
6-element Array{String,1}:
"A, B, C, D, E, F, G"
"H, I, J, K, LMNO, P"
"Q, R, S"
"T, U, V"
"W, X "
"Y, Z"
他の時には、行をまったく気にすることなく、できるだけ単一の文字列として読みたいだけです。 readstring
関数はこれを実行します:
julia> readstring(STDIN)
If music be the food of love, play on,
Give me excess of it; that surfeiting,
The appetite may sicken, and so die. # [END OF INPUT]
"If music be the food of love, play on,\nGive me excess of it; that surfeiting,\nThe appetite may sicken, and so die.\n"
( # [END OF INPUT]
は元の入力の一部ではなく、分かりやすくするために追加されています)。
readstring
はSTDIN
引き数を渡さなければならないことに注意してください。
標準入力から数値を読み込む
標準入力から数値を読み取ることは、文字列を読み込み、数値などの文字列を解析することの組み合わせです。
parse
関数は、文字列を目的の数値型に解析するために使用されます。
julia> parse(Int, "17")
17
julia> parse(Float32, "-3e6")
-3.0f6
parse(T, x)
期待される形式は、Juliaが数値リテラルから期待する形式と似ていますが、まったく同じではありません。
julia> -00000023
-23
julia> parse(Int, "-00000023")
-23
julia> 0x23 |> Int
35
julia> parse(Int, "0x23")
35
julia> 1_000_000
1000000
julia> parse(Int, "1_000_000")
ERROR: ArgumentError: invalid base 10 digit '_' in "1_000_000"
in tryparse_internal(::Type{Int64}, ::String, ::Int64, ::Int64, ::Int64, ::Bool) at ./parse.jl:88
in parse(::Type{Int64}, ::String) at ./parse.jl:152
parse
関数とreadline
関数を組み合わせることで、1行から1つの数値を読み取ることができます。
function asknumber()
print("Enter a number: ")
parse(Float64, readline())
end
期待どおりに動作する:
julia> asknumber()
Enter a number: 78.3
78.3
浮動小数点精度に関する通常の注意事項が適用されます。ことに留意されたいparse
用いて使用することができるBigInt
とBigFloat
精度の損失を除去または最小化します。
場合によっては、同じ行から複数の数値を読み取ると便利です。通常、行は空白で分割できます。
function askints()
print("Enter some integers, separated by spaces: ")
[parse(Int, x) for x in split(readline())]
end
次のように使用できます。
julia> askints()
Enter some integers, separated by spaces: 1 2 3 4
4-element Array{Int64,1}:
1
2
3
4
ファイルからのデータの読み取り
文字列またはバイトの読み取り
ファイルは、 open
関数を使用して読み込み用に開くことができます。これは、 doブロック構文と一緒に使用されることがよくあります 。
open("myfile") do f
for (i, line) in enumerate(eachline(f))
print("Line $i: $line")
end
end
myfile
が存在し、その内容が
What's in a name? That which we call a rose
By any other name would smell as sweet.
次に、このコードは次の結果を生成します。
Line 1: What's in a name? That which we call a rose
Line 2: By any other name would smell as sweet.
ことに注意してくださいeachline
怠惰である反復可能なファイルの行を超えます。パフォーマンス上の理由からreadlines
を使用することをおreadlines
します。
のでdo
構文は匿名関数のためだけ糖衣構文であるブロック、我々はするという名前の関数を渡すことができますopen
すぎ。
julia> open(readstring, "myfile")
"What's in a name? That which we call a rose\nBy any other name would smell as sweet.\n"
julia> open(read, "myfile")
84-element Array{UInt8,1}:
0x57
0x68
0x61
0x74
0x27
0x73
0x20
0x69
0x6e
0x20
⋮
0x73
0x20
0x73
0x77
0x65
0x65
0x74
0x2e
0x0a
関数read
とreadstring
は、ファイルを自動的に開く便利なメソッドを提供します。
julia> readstring("myfile")
"What's in a name? That which we call a rose\nBy any other name would smell as sweet.\n"
構造化データの読み込み
file.csv
という名前のファイルに、次の内容のCSVファイルがあるとします。
Make,Model,Price
Foo,2015A,8000
Foo,2015B,14000
Foo,2016A,10000
Foo,2016B,16000
Bar,2016Q,20000
次に、 readcsv
関数を使用してこのデータをMatrix
に読み込むことができます:
julia> readcsv("file.csv")
6×3 Array{Any,2}:
"Make" "Model" "Price"
"Foo" "2015A" 8000
"Foo" "2015B" 14000
"Foo" "2016A" 10000
"Foo" "2016B" 16000
"Bar" "2016Q" 20000
ファイルがタブで区切られていた場合、 file.tsv
という名前のファイルでは、代わりにreaddlm
関数を使用し、 delim
引数を'\t'
設定します。より高度なワークロードは、 CSV.jl パッケージを使用する必要があり ます 。