Тема: Считывание из таблицы
Считывание из таблицы
Кака считать данные из таблицы, состоящей из edit_box?
Таблица из файла tabl.dcl (по мотивам темы Как можно создать диалог с таблицей )
table: dialog{label="Редактирование"; //шапка :column{ :row{ :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=7; key="a0";} :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=18; key="b0";} :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=27; key="c0";} :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=13; key="d0";} } //... //a6...d6 //dcl-файл будет генерироваться в соответствии с числом строк (count, см.ниже) } spacer; ok_cancel; }
Заполняется в файле table.lsp из списков list_id...list_dtx
(defun edit_param ( ) ;пока все глобальные (if (< (setq dcle_id (load_dialog "table.dcl")) 0)(progn (alert "Не найден dcl")(exit))) (if (not (new_dialog "table" dcle_id)) (progn (alert "не загружается диалог")(exit))) (setq i 0) (repeat count (if (setq fde1 (nth i list_fde)) (progn (set_tile (strcat "a" (itoa i)) (nth i list_id)) (set_tile (strcat "b" (itoa i)) (nth i list_name)) (set_tile (strcat "c" (itoa i)) (nth i list_prompt)) (set_tile (strcat "d" (itoa i)) (nth i list_dtx)) (setq i (1+ i)) ) ;progn ) ;if );repeat
ДО СИХ ПОР РАБОТАЕТ
Содержимое полей редактируется. Нужно сохранить в список по строкам отредактированные значения полей (( a0,...,d0) ... (a6,...d6))
Пытаюсь считывать текущие значения полей
(setq j 0) (repeat count (action_tile (strcat "a" (itoa j)) "(setq a (read $value))") (action_tile (strcat "b" (itoa j)) "(setq b $value)") (action_tile (strcat "c" (itoa j)) "(setq c $value)") (action_tile (strcat "d" (itoa j)) "(setq d (read $value))") (setq list_abcd (append list_abcd (list a b c d ))) (setq j (1+ j)) ) ;repeat
;;;Список list_abcd затеян для того, чтобы, если возможно, избежать get_tile , с его ;;;малопонятными \"name\", поставив action_tile "accept" перед началом цикла по j.
Пытаюсь читать содержимое полей и формировать список с отредактированными значениями
(action_tile "accept" (setq i 0) (repeat count (strcat "(setq a1 (get_tile (strcat "a" (itoa i))))" "(setq b1 (get_tile (strcat "b" (itoa i)))" "(setq c1 (get_tile (strcat "c" (itoa i)))" "(setq d1 (get_tile (strcat "d" (itoa i)))" "(setq list_tab (append list_tab (list a1 b1 c1 d1 )))" "(done_dialog)" ) strcat (setq i (1+ i)) ) ;repeat );"accept" (action_tile "cancel" "(done_dialog)") (start_dialog) (unload_dialog dcle_id) ) ;defun
ВОПРОСЫ
1. Нужны ли мне в этом случае action_tile и get_tile (оба)?
2. Как правильно формировать в цикле выражение для get_tile и искомый список