在 J 中读取多行标准输入
Reading multiline standard input in J
现在我使用这段代码从标准输入读取数据:
print =: 1!:2&2
read =: 1!:1[3
in =. (read-.LR)-.CR
但它 returns 只是一串数字,例如输入:
2
3个
4个
5
输出:
2345
数字的数量未知,但每个都在单独的行中
使用 (1!:1) 读取时,您读取的是字符流。您必须操纵流以获得所需的输入。
例如。如果你想输入一个由行分隔的整数列表,你可以读取列表,然后用 LF 拆分它,删除 LF,然后转换为整数。您可以使用 cut (;._2)
实现前两个步骤,并使用 do (".)
:
实现转换
in =: ".;._2 (1!:1) 3
如果你想输入一个由 space 分隔的整数列表,你只需使用 do
,spaces:
隐含了拆分
in =: ". LF -.~ (1!:1) 3
尾随 LF
(如果存在)必须在应用 ".
之前删除,因为 do
无法转换特殊字符。
现在我使用这段代码从标准输入读取数据:
print =: 1!:2&2
read =: 1!:1[3
in =. (read-.LR)-.CR
但它 returns 只是一串数字,例如输入:
2 3个 4个 5
输出:
2345
数字的数量未知,但每个都在单独的行中
使用 (1!:1) 读取时,您读取的是字符流。您必须操纵流以获得所需的输入。
例如。如果你想输入一个由行分隔的整数列表,你可以读取列表,然后用 LF 拆分它,删除 LF,然后转换为整数。您可以使用 cut (;._2)
实现前两个步骤,并使用 do (".)
:
in =: ".;._2 (1!:1) 3
如果你想输入一个由 space 分隔的整数列表,你只需使用 do
,spaces:
in =: ". LF -.~ (1!:1) 3
尾随 LF
(如果存在)必须在应用 ".
之前删除,因为 do
无法转换特殊字符。