如何在Ubuntu终端上使用的Scheme解释器中调用文件的内容?
我试图利用文本文件中包含的一些数据,并且“ with-input-from-file”不起作用,甚至拼写该文件的确切方向也是如此。我想调用该内容而不必先执行文件。
答案 0 :(得分:1)
如果您正在使用的Scheme解释器兼容R6RS,则可以像下面这样使用with-input-from-file
库中的io simple:
#!r6rs
(import (rnrs base)
(rnrs io simple))
(with-input-from-file "path/to/file.txt"
(lambda ()
;; do the reading using the current input port
....))
注意有两个参数:
lambda ()
,其中没有必须进行阅读的参数或者,您也可以使用call-with-input-file
库中的io simple:
#!r6rs
(import (rnrs base)
(rnrs io simple))
(call-with-input-file "path/to/file.txt"
(lambda (in-port)
;; do the reading using `in-port` explicitly
....))
注意有两个参数:
lambda (in-port)
,其中一个参数必须使用in-port
作为输入端口进行读取要在拥有输入端口后实际进行读取,可以使用诸如read
,read-char
,get-string-n
,get-string-all
,get-line
,或get-datum
。您应使用哪种格式取决于文本文件中数据的格式。读取整个文件最简单的方法是io-ports库中的get-string-all
:
#!r6rs
(import (rnrs base)
(rnrs io ports)
(rnrs io simple))
(call-with-input-file "path/to/file.txt"
(lambda (in-port)
;; do the reading using `in-port` explicitly
(get-string-all in-port)))
值得注意的是,如果这是您的最终程序,则可以简化为:
#!r6rs
(import (rnrs base)
(rnrs io ports)
(rnrs io simple))
(call-with-input-file "path/to/file.txt" get-string-all)