我正在创建一个向平面文件添加列的函数。到目前为止,我有:
(defun ff-from-vector (vec dir file)
(with-open-file (ff-vec-str (make-pathname :name file
:directory dir)
:direction :output
:if-exists :overwrite)
(dotimes (i (length vec))
(format ff-vec-str "~A~%" (svref vec i)))))
(defun vec-from-1col-ff (dir file)
(let ((col (make-array `(,(ff-rows dir file)))))
(with-open-file (ff-col-str (make-pathname :name file
:directory dir)
:direction :input)
(do ((line (read-line ff-col-str nil 'eof)
(read-line ff-col-str nil 'eof))
(i 0 (incf i)))
((eql line 'eof))
(setf (aref col i) (read-from-string line))))
col))
(defun add-col-to-ff (col-dir col-file ff-dir ff-file)
(ff-from-vector (vec-from-1col-ff col-dir col-file)
ff-dir
ff-file))
然而,当我从文件中读到时:
2
2
2
2
并尝试覆盖该文件:
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
我明白了:
2
2
2
2
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
基本上我的问题是:什么函数或代码将格式化移动到输出文件中的行尾?所以我可以得到:
1 1 1 1 2
1 1 1 1 2
1 1 1 1 2
1 1 1 1 2
答案 0 :(得分:1)
您不能简单地将更多输出添加到文件中的各行,而不会覆盖某些数据。
创建一个新文件并将输出放在那里,从两个输入文件中获取数据。