Функция для чтения таблицы из столбцов NUMCOLS из потока
Предполагается, что элементы из таблицы могут быть прочитаны с READ
.(PEEK-CHAR T ...)
проверяет, есть ли еще какой-нибудь непробельный текст в потоке.
(defun read-a-table (stream numcols)
(cons (loop repeat numcols collect (read stream))
(loop while (peek-char t stream nil nil)
collect (loop repeat numcols collect (read stream)))))
Вот два примера функций
Один читает таблицу из файладругой читает таблицу из строки.
(defun read-a-table-from-file (file numcols)
(with-open-file (stream file)
(read-a-table stream numcols)))
(defun read-a-table-from-string (string numcols)
(with-input-from-string (stream string)
(read-a-table stream numcols)))
Давайте проверим ее с помощью строки:
(defun test ()
(read-a-table-from-string "ID YR MO DA YrM MoM DaM
100 2010 2 20 2010 8 30
110 2010 4 30 2010 9 12
112 2010 8 20 2010 10 20"
7))
Выполнение теста
CL-USER 15 > (test)
((ID YR MO DA YRM MOM DAM)
(100 2010 2 20 2010 8 30)
(110 2010 4 30 2010 9 12)
(112 2010 8 20 2010 10 20))