從標準輸入讀取字串

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 引數。