О команде "with-input-from-file" на схеме - PullRequest
0 голосов
/ 12 ноября 2018

Как мне вызвать содержимое файла в интерпретаторе Scheme, работающем на терминале Ubuntu?

Я пытаюсь использовать некоторые данные, включенные в текстовый файл, и «with-input-from-file» не работает, даже с указанием точного направления этого файла. Я хотел бы вызвать этот контент без необходимости сначала выполнять файл.

1 Ответ

0 голосов
/ 12 ноября 2018

Если используемый вами интерпретатор 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
    ....))

Обратите внимание на два аргумента:

  • путь к файлу
  • a 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
    ....))

Обратите внимание на два аргумента:

  • путь к файлу
  • a lambda (in-port) с одним аргументом, который должен читать, используя in-port в качестве входного порта

Чтобы действительно выполнить чтение, когда у вас есть входной порт, вы можете использовать такие функции, как read, read-char, get-string-n, get-string-all, get-line или get-datum. Какой из них использовать, зависит от формата данных в текстовом файле. Самый простой способ чтения всего файла - get-string-all из библиотеки io-ports:

#!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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...