|
@@ -72,18 +72,11 @@
|
|
|
while line
|
|
|
collect line)))
|
|
|
(mre (ppcre:create-scanner "^(.*)[0-9]{4}$"))
|
|
|
- ;;(ere (ppcre:create-scanner "^([A-Za-z].*).*$([0-9]{1,4}).*"))
|
|
|
(ere (ppcre:create-scanner "^([A-Z].*)\ -\ \\\$([0-9]{1,4}) - PAID"))
|
|
|
(cur-mon)
|
|
|
(cur-exp))
|
|
|
(loop for line in old-file-lines
|
|
|
do (progn
|
|
|
-;;; (if (ppcre:scan mre line) (progn
|
|
|
-;;; (let ((result)
|
|
|
-;;; (month-num))
|
|
|
-;;; (setf result (ppcre:register-groups-bind (first second) (mre line) :sharedp t (list first second)))
|
|
|
-;;; (setf month-num (cdr (assoc '(first result) *month-table*)))
|
|
|
-;;; (setf cur-mon (concatenate (second result) month-num)))))
|
|
|
(if (ppcre:scan mre line) (setf cur-mon line))
|
|
|
(if (ppcre:scan ere line)
|
|
|
(progn
|
|
@@ -98,31 +91,45 @@
|
|
|
(let ((innerhash (gethash cur-mon *records*)))
|
|
|
(setf (gethash (first cur-exp) innerhash) (second cur-exp)))))))))))
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+(defmacro generic-handler (form error-string)
|
|
|
+ `(handler-case ,form
|
|
|
+ (error (e)
|
|
|
+ (format t "Invalid input: ~a ~%" ,error-string)
|
|
|
+ (values 0 e))))
|
|
|
|
|
|
;; Entry point
|
|
|
(defun main ()
|
|
|
- (format t "Available options:~C" #\linefeed)
|
|
|
- (format t "1. Enter expense~C" #\linefeed)
|
|
|
- (format t "2. Display month~C" #\linefeed)
|
|
|
- (format t "3. Write records~C" #\linefeed)
|
|
|
- (format t "4. Read records~C" #\linefeed)
|
|
|
- (format t "5. Quit~C" #\linefeed)
|
|
|
- (format t "6. Import Records~C" #\linefeed)
|
|
|
+ (format t "~%")
|
|
|
+ (format t "Available options:~%")
|
|
|
+ (format t "1. Enter expense~%")
|
|
|
+ (format t "2. Display month~%")
|
|
|
+ (format t "3. Write records~%")
|
|
|
+ (format t "4. Read records~%")
|
|
|
+ (format t "5. Quit~%")
|
|
|
+ (format t "6. Import Records~%")
|
|
|
(let
|
|
|
((answer (prompt-read "Select an option")))
|
|
|
(if (string= answer "1")
|
|
|
- (add-expense-to-month
|
|
|
- (prompt-read "Enter month")))
|
|
|
+ (generic-handler
|
|
|
+ (add-expense-to-month (prompt-read "Enter month"))
|
|
|
+ "Invalid Input"))
|
|
|
(if (string= answer "2")
|
|
|
- (dump-month
|
|
|
- (prompt-read "Enter month")))
|
|
|
+ (generic-handler
|
|
|
+ (dump-month (prompt-read "Enter month"))
|
|
|
+ "Invalid month"))
|
|
|
(if (string= answer "3")
|
|
|
- (serialize-records (prompt-read "Enter filename")))
|
|
|
+ (generic-handler
|
|
|
+ (serialize-records (prompt-read "Enter filename"))
|
|
|
+ "Serialization error or invalid filename"))
|
|
|
(if (string= answer "4")
|
|
|
- (deserialize-records (prompt-read "Enter filename")))
|
|
|
+ (generic-handler
|
|
|
+ (deserialize-records (prompt-read "Enter filename"))
|
|
|
+ "Deserialization error or invalid filename"))
|
|
|
(if (string= answer "5")
|
|
|
(quit))
|
|
|
(if (string= answer "6")
|
|
|
- (import-records (prompt-read "Enter filename"))))
|
|
|
- (main))
|
|
|
+ (generic-handler
|
|
|
+ (import-records (prompt-read "Enter filename"))
|
|
|
+ "Parsing error or invalid filename"))
|
|
|
+ (main)))
|