写入文件中的行尾

时间:2013-02-15 12:23:18

标签: io common-lisp

我正在创建一个向平面文件添加列的函数。到目前为止,我有:

(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

1 个答案:

答案 0 :(得分:1)

您不能简单地将更多输出添加到文件中的各行,而不会覆盖某些数据。

创建一个新文件并将输出放在那里,从两个输入文件中获取数据。