将字符串附加到IronScheme中的现有文本文件

时间:2015-05-22 09:48:46

标签: 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)))

了解在使用with-output-to-file时我们如何使用“exists”可选参数。我们不确定如何使此可选参数与IronScheme一起使用。有没有办法让这个工作,或替代方法?

请注意,我们要将字符串附加到现有的.txt文件中。如果我们不使用可选参数,则会抛出一个错误,指出该文件已存在。

2 个答案:

答案 0 :(得分:1)

IronScheme支持R6RS:)

<form name="myForm"> <input name="myText" type="text" ng-model="mytext" required /> <button ng-disabled="myForm.$invalid || myForm.$pending">Save</button> </form> 无法使用

file-options,因此您需要使用with-output-to-file

示例(不正确):

open-file-output-port

<强>更新

以上工作。看来你可能在IronScheme中发现了一个错误。虽然从R6RS中不清楚(let ((p (open-file-output-port "robot-log.txt" (file-options no-create)))) (fprintf p "~a\r\n" whatToWrite) (close-port p)) 应该表现得像追加,如果有的话。我会进一步调查并提供反馈。

更新2:

我已经和R6RS的一位编辑谈过,似乎没有一种可移植的方式来指定'追加模式'。我们当然可以在.NET中使用它,因此我将通过添加另一个file-options来解决此问题。我还会考虑为'simple io'程序添加一些重载来处理这个问题,因为使用上面的代码相当繁琐。感谢您发现问题!

更新3:

我已经解决了这个问题。从TFS rev 114008开始,file-options已添加到append。此外,file-optionswith-output-to-filecall-with-output-file还有一个额外的可选参数来指示“追加模式”。您可以从http://build.ironscheme.net/获取最新版本。

示例:

open-output-file

答案 1 :(得分:0)

据我所知,IronScheme基于R5RS。来自R5RS Documentation

  

对于with-output-to-file,如果文件已存在,则效果未指定。

因此抛出错误肯定与规范一致,并且不应期望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)

这是一种简单的方法,可以让你接近你想要的。