从标准输入读取字符串
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
参数。