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