File 将字符串附加到IronScheme中的现有文本文件
我们正在尝试使用IronScheme构建一个日志文件,并使用racket为其编写了代码。它在球拍中运行良好,但IronScheme抛出了一个错误。这就是我们目前的情况:File 将字符串附加到IronScheme中的现有文本文件,file,scheme,append,r6rs,ironscheme,File,Scheme,Append,R6rs,Ironscheme,我们正在尝试使用IronScheme构建一个日志文件,并使用racket为其编写了代码。它在球拍中运行良好,但IronScheme抛出了一个错误。这就是我们目前的情况: (define write-to-log (lambda(whatToWrite) (with-output-to-file "robot-log.txt" (lambda () (printf (string-append whatToWrite "\r\n" ))) #:exists 'append))) 请参见在与文件输
(define write-to-log
(lambda(whatToWrite)
(with-output-to-file "robot-log.txt"
(lambda () (printf (string-append whatToWrite "\r\n" ))) #:exists 'append)))
请参见在与文件输出一起使用时如何使用“exists”可选参数。我们不确定如何使此可选参数与IronScheme一起工作。有没有什么方法可以让它发挥作用,或者其他方法
请注意,我们希望在现有的.txt文件中附加一个字符串。如果不使用可选参数,则会抛出一个错误,说明文件已存在 据我所知,IronScheme是基于R5R的。从: 对于输出到文件的
,如果文件已存在,则效果未指定
所以抛出一个错误肯定是符合规范的,不应该期望Racket代码的可移植性
警告:这段代码是在不同的R5RS实现上运行的,而不是IronScheme
如果您只想附加到R5RS中的现有文件:
(define my-file (open-output-file "robotlog.txt"))
(display (string-append what-to-write "\r\n") my-file)
(close-output-port my-file)
是一种简单的方法,可以让您接近您想要的内容。IronScheme支持R6RS:)
文件选项
在输出到文件的上不可用,因此您需要使用打开文件输出端口
示例(不正确):
更新:
上述操作将不起作用。看来您可能在IronScheme中发现了一个bug。但是,从R6RS来看,还不清楚哪些文件选项应该像append一样运行(如果有的话)。我将进一步调查并提供反馈
更新2:
我已经和R6RS的一个编辑器谈过了,它似乎没有指定“附加模式”的可移植方式。当然,我们在.NET中提供了这一功能,因此我将通过添加另一个用于附加的文件选项来解决此问题。我还将考虑为“简单io”过程添加一些重载来处理此问题,因为使用上述代码相当繁琐。谢谢你发现了这个问题
更新3:
我已经谈到了这个问题。从TFS版本114008开始,追加
已添加到文件选项
。另外,输出到文件
,调用输出文件
和打开输出文件
还有一个额外的可选参数来指示“追加模式”。您可以从获取最新版本
例如:
(with-output-to-file "test.txt" (lambda () (displayln "world")) #t)
它会抛出什么错误?算术不匹配。“exists”参数并不奇怪,因为Scheme标准没有为输出到文件的指定任何关键字参数。谢谢您的回答!不幸的是,这段代码总是试图创建一个新文件,如果该文件存在,就会抛出一个错误。(i/o-file-ready-exists)@Robert如果我的示例代码对现有文件抛出错误,那么问题可能只是铁方案的非标准性质。谢谢你的回答!从那时起,我们找到了一个解决办法,现在我们覆盖所有内容,并在阅读时以不同的方式进行处理。@Robert:仍在调查中。上面的代码是错误的。哇!谢谢你这么快就解决了这个问题:)@Robert:我努力在24小时内给予支持:D
(with-output-to-file "test.txt" (lambda () (displayln "world")) #t)