Логотип сайта поддержки пользователей САПРО сайте поддержки пользователей САПР Translate to:

Компиляция и использование данных в текстовых файлах в программах на Visual LISP

Barry Bowen
Журнал Cadalyst

Visual LISP обладает возможностью возвращать текст, сохраненный в .txt - файле, который в свою очередь был скомпилирован в VLX-приложение. VLX-файл представляет собой набор одного или более AutoLISP и DCL файлов, созданых с использованием среды Visual LISP. Однако текстовые файлы возвращаются полностью, а не как биты данных от файла данных. Однако существует метод позволяющий обращатся к дискретным данным, который и будет описан ниже.

Что нужно сделать.
Для файла данных, чтобы бы он был пригодный для использования как данные, возращаемые функцией (vl-get-resource), данные должны быть сформатированы так чтобы можно было идентифицировать определенные строки данных и извлечь только требуемые элементы.

Формат подобен формату текстовых данных, котрый я использовал раньше с одним отличием - данные становятся списком из одной строки вместо многострочных списков, как показано ниже:

Для AutoLisp
("010" "1.5" "12.75" "0.375")
("020" "3.5" "14.50" "0.675")
("030" "4.5" "16.75" "0.875")
Для запаковки в VLX
("010" "1.5" "12.75" "0.375"
 "020" "3.5" "14.50" "0.675"
 "030" "4.5" "16.75" "0.875")

Получение данных
После того как файл запакован в VLX-приложение, данные возвращаются с помощью функции (nth). Прежде всего подпрограмма возвращает список и назначает его переменной:

(setq DATA_LIST (vl-get-resource "datafile"))
(vl-get-resource) возвращает список данных как текстовую строку, которую вы должны сконвертировать в доступный для использования список с помощью следующего кода:
(setq DATA_LIST (read DATA_LIST))
Теперь вы можете использовать функцию (nth) для обработки списка. Чтобы извлеч данные, ассоциированые с элементом "020" , к примеру, используется следующие операторы:
(setq ITEM_ID (nth 4 DATA_LIST))
(setq ITEM_01 (nth 5 DATA_LIST))
(setq ITEM_02 (nth 6 DATA_LIST))
(setq ITEM_03 (nth 7 DATA_LIST))

Как находить данные, если их расположение неизвестно
Для извлечения данных, если их расположение в списке неизвестно, можно использовать следующий цикл:

(setq IN 0 ID# "020")
(while (/= ITEM_ID ID#)
  (setq ITEM_ID (nth IN DATA_LIST))
  (setq IN (1+ IN))
) 
После того как подпрограмма определила местонахождения элемента и сохранила его местоположение в переменную IN, извлечем нужные нам данные:
(setq ITEM_01 (nth IN DATA_LIST))
(setq ITEM_02 (nth (1+ IN) DATA_LIST))
(setq ITEM_03 (nth (+ 2 IN) DATA_LIST))

Запаковка файла
Чтобы запаковать файл данных в VLX-приложение, откроем New Application wizard в подменю File/Make Application в меню VLISP. Выберем режим Expert (рис. 1), и затем добавим файлы ресурсов в панеле Include (рис. 2).


рис. 1


рис. 2

Установим тип файлов Text files, и затем выберем необходимые файлы для включения.

Продолжим выполнение волшебника и создадим наше приложение. Файлы данных сохранятся в результирующем файле VLX-приложения.



Copyright © Сайт поддержки пользователей САПР by Victor Tkachenko