Чтение многострочного стандартного ввода в J
Теперь я использую этот код для чтения данных из стандартного ввода:
print =: 1!:2&2
read =: 1!:1[3
in =. (read-.LR)-.CR
Но он возвращает только последовательность чисел, например, input:
2 3 4 5
Выход:
2345
Количество чисел неизвестно, но каждое находится в отдельной строке
1 ответ
При чтении с помощью (1!:1) вы читаете поток символов. Вы должны манипулировать потоком, чтобы получить желаемый вход.
Например. Если вы хотите ввести список целых чисел, разделенных строкой, вы должны прочитать список, затем разделить его на LF, удалить LF и затем преобразовать в целое число. Вы можете достичь первых двух шагов, используя cut (;._2)
и преобразование с использованием do (".)
:
in =: ".;._2 (1!:1) 3
Если вы хотите ввести список целых чисел, разделенных пробелами, вы просто должны использовать do
, расщепление будет подразумеваться пробелами:
in =: ". LF -.~ (1!:1) 3
задний LF
(если присутствует) должен быть удален перед применением ".
так как do
не может конвертировать специальные символы