关于Scheme上的“ with-input-from-file”命令

时间:2018-11-12 09:50:37

标签: scheme

如何在Ubuntu终端上使用的Scheme解释器中调用文件的内容?

我试图利用文本文件中包含的一些数据,并且“ with-input-from-file”不起作用,甚至拼写该文件的确切方向也是如此。我想调用该内容而不必先执行文件。

1 个答案:

答案 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作为输入端口进行读取

要在拥有输入端口后实际进行读取,可以使用诸如readread-charget-string-nget-string-allget-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)