Я пытаюсь прочитать и написать матрицу из файла «data.txt». Матрица представляет собой списки со строками внутри них. Когда я пишу, я хочу написать с начала переопределение данных. В основном я удаляю файл каждый раз. Мне нужно более полное решение. Основная проблема заключается в том, что после нескольких чтений и корней файла развращает.Чтение и запись из файла в схеме
системная ошибка: доступ запрещен; ERRNO = 5
Мой код:
;reading file returning matix of strings
(define (file-reader file-name)
(define pointer (open-input-file file-name))
(define (helper line)
(cond
((equal? line eof) '())
((cons (list line) (helper (read-line pointer))))))
(list-matr (helper (read-line pointer)))
)
;converting matrix of string to matrix of lists with strings inside
(define (list-matr str-matr)
(define (helper str-matr line-num)
(cond
((null? str-matr) '())
((= line-num 1) (cons (map (lambda (x) (string-append x "?")) (string-split (caar str-matr) "? ")) (helper (cdr str-matr) (+ line-num 1))))
((cons (string-split (caar str-matr) " ") (helper (cdr str-matr) (+ line-num 1))))))
(helper str-matr 1))
;saving in file
(define (writer file-name questions answers)
(cond
((file-exists? file-name) (delete-file file-name)))
(write-to-file file-name (string-append (string-join questions) "\n"))
(define (helper cur-l ans)
(cond
((null? ans))
((helper (write-to-file file-name (string-append (string-join (car ans)) "\n")) (cdr ans)))))
(helper '() answers)
)
(define (write-to-file path string)
(call-with-output-file path #:exists 'append
(lambda (newline)
(display string newline))))
команд для вызова функций.
(файл-читатель «data.txt»)
(писатель «data.txt» вопросы ответы)
Я думаю, что проблема идет от этого я не закрывать файлы, но я не могу Не поймите, куда поставить команду для этого.
Если мой код очень плохой, вы можете дать мне другие примеры для чтения и записи матрицы из файла.
спасибо.