0

フラットファイルに列を追加する関数を作成しています。これまでのところ:

(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
4

1 に答える 1

1

一部のデータを上書きせずに、ファイル内の個々の行に出力を追加することはできません。

新しいファイルを作成し、そこに出力を配置して、2つの入力ファイルからデータを取得します。

于 2013-02-15T12:57:33.783 に答える