你可以做几乎所有你想要的......在低级别,我建议(读取线)和(读取字节).对于更高级别的处理(例如scanf),我建议在输入上进行正则表达式匹配.例如
(regexp-match #px" *([0-9]+)" (current-input-port))
Run Code Online (Sandbox Code Playgroud)
read-line
简单.要在Unix和Windows之间移植,需要额外的选项.
(read-line (current-input-port) 'any)
Run Code Online (Sandbox Code Playgroud)
在文本模式下读取文件时自动执行的转换后,将检测返回和换行符.例如,在Windows上以文本模式读取文件会自动将返回换行组合更改为换行符.因此,当在文本模式下打开文件时,'换行通常是适当的读取线模式.
因此,当输入端口不是文件(标准输入)时,任何都需要是可移植的.
测试程序:
#lang racket
(let loop ()
(display "Input: ")
(define a (read-line (current-input-port) 'any))
(printf "input: ~a, length: ~a, last character: ~a\n"
a
(string-length a)
(char->integer (string-ref a (- (string-length a) 1))))
(loop))
Run Code Online (Sandbox Code Playgroud)
在Windows中,替换(read-line (current-input-port) 'any)
用(read-line)
,看看会发生什么.