;;; UMLS-Parse General ;;; General purpose Lisp Routines for parsing UMLS files ;;; and inserting into SQL databases ;;; ;;; Copyright (c) 2001 Kevin M. Rosenberg, M.D. ;;; $Id: parse-macros.lisp,v 1.1 2002/10/05 20:17:14 kevin Exp $ (in-package :umlisp) (defmacro with-umls-file ((line filename) &body body) "Opens a UMLS and processes each parsed line with (body) argument" (let ((ustream (gensym))) `(with-open-file (,ustream (umls-pathname ,filename) :direction :input :if-exists :overwrite) (do ((,line (read-umls-line ,ustream) (read-umls-line ,ustream))) ((eq ,line 'eof) t) ,@body)))) (defmacro with-buffered-umls-file ((line filename) &body body) "Opens a UMLS and processes each parsed line with (body) argument" (let ((ustream (gensym)) (buffer (gensym))) `(let ((,buffer (make-fields-buffer))) (with-open-file (,ustream (umls-pathname ,filename) :direction :input :if-exists :overwrite) (do ((,line (read-buffered-fields ,buffer ,ustream) (read-buffered-fields ,buffer ,ustream))) ((eq ,line 'eof) t) ,@body))))) (defmacro with-buffered2-umls-file ((line filename) &body body) "Opens a UMLS and processes each parsed line with (body) argument" (let ((ustream (gensym)) (buffer (gensym))) `(let ((,buffer (make-fields-buffer2))) (with-open-file (,ustream (umls-pathname ,filename) :direction :input :if-exists :overwrite) (do ((,line (read-buffered-fields2 ,buffer ,ustream) (read-buffered-fields2 ,buffer ,ustream))) ((eq ,line 'eof) t) ,@body)))))