Browse Source

Some more adjustments

Simon Watson 2 years ago
parent
commit
11ee3a7636
1 changed files with 30 additions and 23 deletions
  1. 30 23
      fin-lisp.lisp

+ 30 - 23
fin-lisp.lisp

@@ -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)))