;;;;This is in reference to ;;;mastodon.sdf.org/@solene@bsd.network/109367737370448977 (setq *read-eval* nil) (defun field-from-end (stream column) " (field-from-end stream column) Reads characters from the end of the stream, chomps up to one trailing newline. When a newline is found, READs the columnth last tab position. " (let ((length (file-length stream))) (let ((char-reader (let ((last-position length)) (when (char= #\newline (progn (file-position stream (1- length)) (read-char stream))) (decf last-position)) (lambda () (unless (zerop last-position) (values (progn (file-position stream (decf last-position)) (read-char stream)) last-position)))))) (let ((tabs-found (list))) (loop (multiple-value-bind (char position) (funcall char-reader) (cond ((null char) (error "Beginning of file reached")) ((char= #\tab char) (push position tabs-found)) ((char= #\newline char) (push position tabs-found) (file-position stream (nth column (progn tabs-found))) (return-from field-from-end (read stream))) ((characterp char)) (t (error "Something else happened"))))))))) (defun eg () " (eg) clobbers a file named test.txt. Uses that file to exhibit last-row column seeks. " (with-open-file (out #p"test.txt" :direction :output :if-exists :Supersede :if-does-not-exist :create) (format out "foo bar baz buz bizaz biz frob ulus ly featherless biped charlie")) (with-open-file (in #p"test.txt") (prin1 (field-from-end in 0)) (prin1 (field-from-end in 1)) (prin1 (field-from-end in 2))) (terpri)) (time (eg)) (quit)