サーチ…


構文

  • 読み込まれた行()
  • 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"
0.5.0

もう一度、 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 パッケージを使用する必要があり ます 。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow