我试图从文件" data.txt"中读取和写入矩阵。 矩阵是列在其中的字符串。 当我写作时,我想从开头写一个覆盖数据。基本上我每次都删除文件。我需要更好的解决这个问题。 可能主要的问题是,在几次读数和文件的扭曲之后会腐败。
系统错误:访问被拒绝。错误号= 5
我的代码:
httpClient.get('example.com/users')
.then(response => JSON.parse(response.body).users[0])
.then(userId => httpClient.get('example.com/users/' + userId))
.catch(error => console.error(error))
用于调用函数的命令。
(文件阅读器" data.txt")
(作家" data.txt"问题答案)
我认为问题来自我不会关闭文件,但我无法弄清楚该命令的位置。
如果我的代码非常糟糕,你可以给我一些从文件中读取和写入矩阵的例子。
谢谢。
答案 0 :(得分:0)
你说错了,文件会损坏 - 它从未正常关闭。
每次都不会覆盖文件,你需要的东西不符合正常的R5RS / R7RS小规格,而且我不知道任何(最终)SRFI允许随机文件访问的问题。 。也就是说,许多/大多数Scheme实现提供某种形式的低级I / O接口。这样做的缺点是你必须非常仔细地跟踪结构,以便覆盖或仅添加正确的数量,这可能比重写整个文件更有用。
我建议完全重组。首先,call-with-output-file / with-output-to-file过程将自动覆盖输出文件,除非另有标记(在大多数实现中 - 尽管规范声明行为未定义)。他们还将在完成后自动关闭文件。 call-with-input-file / with-input-from-file过程的类似行为。
您可以通过以下内容简化所有内容:
; reader
; this could be further simplified by replacing the cons call with
; (cons (<parse-procedure> l) r), to parse the input at the same time
(define (matrix-read filename)
(with-input-from-file filename (lambda ()
(let loop ((l (read-line))
(r '()))
(if (eof-object? l)
(reverse r)
(loop (read-line) (cons l r))))))
; I don't understand the input/output format...
; writer
(define (matrix-write filename data)
(with-output-to-file filename (lambda ()
(for-each
(lambda (l)
; again, I don't know the actual structure outside of a list
(display l)
(newline))
data))))
如果您解释输入格式,我可以修改答案。