從標準輸入讀取字串
Julia 中的 STDIN
流是指標準輸入 。這可以表示使用者輸入,互動式命令列程式,或來自已重定向到程式的檔案或管道的輸入。
當沒有提供任何引數時,readline
函式將從 STDIN
讀取資料,直到遇到換行符,或者 STDIN
流進入檔案結束狀態。這兩種情況可以通過\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
函式可用於從字串中刪除最多一個尾隨換行符。例如:
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"
Version >= 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
引數。