我是计划的新手,并尝试在计划中构建一个简单的应用程序。我想使用简单的文本文件作为数据库,因此程序基本上从文件加载文本,对其执行某些操作并将结果保存到(可能不同的)文件中。我的问题是,我正在处理的文本是德语,所以我需要“latin-1-symbols” ä/ä、Ö/ö、Ü/ü 和 ß。我正在使用 chez 方案,并且我读到了有关转码器(R6RS)的信息,但我无法让它工作。
有人可以给我一个简单的例子,如何在chez方案中的latin-1-codec中获取(输入端口)和保存(输出端口)文本吗?
非常感谢。
根据 R6RS、R6RS-lib 和 Chez-User-Guide 提供的信息,我无法解决问题。在互联网上我找不到任何进一步的解释。如果有人知道学习材料的良好来源,我将不胜感激。
open-file-input-port
以及由 (make-transcoder (latin-1-codec))
返回的转码器来获取从 ISO-8859-1 转换的文本输入端口。不幸的是,没有 call-with-input-file
或 with-input-from-file
版本可以让您指定转码器,因此您必须记住手动关闭返回的端口。 Chez 有一个 current-transcoder
参数,可用于更改默认参数,从而允许您使用这些功能。
示例:
#!r6rs
(import (rnrs base)
(rnrs io simple)
(rnrs io ports)
(only (chezscheme) current-transcoder parameterize))
(define filename "sample.txt") ; A file with Latin-1 text
;; Read one line from a port and echo it to current-output-port
(define (echo-line p)
(display (get-line p))
(newline))
;;; R6RS
(define p (open-file-input-port filename
(file-options)
(buffer-mode block)
(make-transcoder (latin-1-codec))))
(echo-line p)
(close-port p)
;;; Chez specific
(parameterize ((current-transcoder (make-transcoder (latin-1-codec))))
(call-with-input-file filename echo-line))