Simple database: Difference between revisions
Content added Content deleted
(→{{header|Common Lisp}}: don't overwrite if file exists as it should have been renamed before) |
(→{{header|Common Lisp}}: version backups) |
||
Line 119: | Line 119: | ||
:date (parse-date (prompt-read "Date watched" (format-ymd))) |
:date (parse-date (prompt-read "Date watched" (format-ymd))) |
||
:tags (parse-tags (prompt-read "Tags")))) |
:tags (parse-tags (prompt-read "Tags")))) |
||
(defun parse-integer-quietly (&rest args) |
|||
(ignore-errors (apply #'parse-integer args))) |
|||
(defun get-next-version (basename) |
|||
(flet ((parse-version (pathname) |
|||
⚫ | |||
(string-left-trim (file-namestring basename) |
|||
(file-namestring pathname)) |
|||
:start 1) 0))) |
|||
(let* ((files (directory (format nil "~A,*" (namestring basename)))) |
|||
(max (reduce #'max files :key #'parse-version))) |
|||
(merge-pathnames (format nil "~a,~d" (file-namestring basename) (1+ max)) |
|||
basename)))) |
|||
(defun save-db (dbfile database) |
(defun save-db (dbfile database) |
||
(let ((file (probe-file dbfile))) |
(let ((file (probe-file dbfile))) |
||
(rename-file file ( |
(rename-file file (get-next-version file)) |
||
(with-open-file (out file |
(with-open-file (out file :direction :output) |
||
⚫ | |||
(with-standard-io-syntax |
(with-standard-io-syntax |
||
(let ((*print-case* :downcase)) |
(let ((*print-case* :downcase)) |