| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Редактор VLIDE. Как получить список всех описанных функций открытого в редакторе файла.

Редактор VLIDE. Как получить список всех описанных функций открытого в редакторе файла.

Ответ
Поиск в этой теме
Непрочитано 15.06.2013, 13:18 #1
Редактор VLIDE. Как получить список всех описанных функций открытого в редакторе файла.
Kirill_Ja
 
Мурманск
Регистрация: 28.07.2008
Сообщений: 208

Итак, мой проект дошел таки до состояния когда уже пора учитывать все ранее описанные функции.
Просто иначе может возникнуть жуткая путаница.

Можно как-то получить список всех описанных функций в *.lsp файле автоматически?
Ручками искать каждое объявление довольно затруднительно.
__________________
Мне не нужно сделать за меня. Если я что-то ищу, то пути решения.
Просмотров: 4705
 
Непрочитано 15.06.2013, 18:30
#2
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Kirill_Ja Посмотреть сообщение
Итак, мой проект дошел таки до состояния когда уже пора учитывать все ранее описанные функции.
Есть такое понятие - стиль программиста.
Много хорошего написано по организации этого труда в книге http://www.books.ru/books/sapr-na-ba...ya--cd-207838/
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 15.06.2013, 21:35
#3
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Много хорошего написано по организации этого труда в книге
Спасибо, Александр. Помнишь.
По исходному вопросу:

1. Надо создать Project. В него можно включить и один файл и сотни. У меня, например, в проектах (файлы с расширением .prj) для библиотек записаны тысячи по две отдельных файлов. С помощью проекта можно скомпилировать кучу разрозненных файлов (или один) в FAS или VLX.

2. Когда код более или менее готов, можно выполнить Project - Build Project Fas. Вот в момент компилирования в специальное окно <Build Output> выводится протокол, в котором и записываются все файлы, и найденные в них функции, и имена переменных-аргументов, и имена выловленных глобальных переменных. Очень полезная информация.

3. Для отдельного файла можно еще проще: Tools -Check Text In Editor. Выдаст в окно <Build Output> имена функций с количеством аргументов.

А чтобы не возникало "жуткой путаницы", прочитай книгу по ссылке. Там подробно расписано, как организовать распределение функций и "программ" по файлам, даже когда их будут тысячи. Для оперативной работы с этим множеством файлов рекомендую использовать мою программу ruSourceExplorer, которая где-то в DNL лежит.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 16.06.2013, 00:01
#4
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Согласен.
Организация труда - 2/3 успеха.
__________________
Мне не нужно сделать за меня. Если я что-то ищу, то пути решения.
Kirill_Ja вне форума  
 
Непрочитано 16.06.2013, 01:54
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Для Notepad++ есть плагин Function List, который показывает все функции в файле...
gomer вне форума  
 
Непрочитано 16.06.2013, 03:40
#6
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от Kirill_Ja Посмотреть сообщение
Ручками искать каждое объявление довольно затруднительно.
а ты своим функциям давал уникальные имена? ну типа префикс какой-то авторский?
Vov.Ka вне форума  
 
Непрочитано 21.06.2013, 14:24
#7
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


я раньше работал одна функция - один файл (т.е. библиотека) как советовали отцы Полещук и Зуев, теперь работаю весь проект в одном файле lsp
, но библиотеки тоже могут присутствовать, иногда одна функция дублируется и загружается дважды - побоку, если нужно поправить базовую функцию то делаю, новую функциональность функций не меняю в принципе. + В комментариях пишу волшебные слова по которым осуществляю поиск.
Плюс обычный поиск по лисп функциям.
30 000 строк кода - не запутался, все хорошо.
В брикскаде нет Vlide - проект ведется в SciTE, - ничего нормально.
Sleekka вне форума  
 
Автор темы   Непрочитано 23.06.2013, 19:54
#8
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Я сейчас работаю: один модуль - один файл.
Например все функции вставки блоков - в 1-м файле.
Все функции работы с X-записями - в другом.
И часто функции одного модуля используются в другом. Надо иметь где-то перечень всех объявленных функции, чтобы чего доброго не написать 2-ю такую же как уже есть)))
__________________
Мне не нужно сделать за меня. Если я что-то ищу, то пути решения.
Kirill_Ja вне форума  
 
Непрочитано 23.06.2013, 20:37
#9
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Надо иметь где-то перечень всех объявленных функции, чтобы чего доброго не написать 2-ю такую же как уже есть)))
нет ничего страшного если напишешь еще одну такую же.
я себе в txt выписываю функции с небольшими коментами.
Если нужен список, лисп код - есть список. Открывай lsp на чтение, и парси текстовик в список, потом ищи defun.
я иногда использую конструкцию - при загрузке лиспа список сохраняется в переменную, а потом из этой переменной делается (eval(read x))
где х - это код
потом лажу по списку х, чтобы находить там нужные данные.
Sleekka вне форума  
 
Непрочитано 23.06.2013, 20:44
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Все же я не понимаю, чем не нравится подход "один lsp = одна функция". Самое сложное тут - придумать закон именования функций. Потом достаточно ему следовать, и найти нужную функцию (точнее, файл с ее определением) уже никакого труда не составит.
Единственная возможная трудность - автозапускаемые функции, но и это можно либо обойти, либо еще что-то придумать. Хотя - хозяин барин, ученого учить только портить и теде ))))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.06.2013, 20:58
#11
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Все же я не понимаю, чем не нравится подход "один lsp = одна функция". Самое сложное тут - придумать закон именования функций. Потом достаточно ему следовать, и найти нужную функцию (точнее, файл с ее определением) уже никакого труда не составит.
Единственная возможная трудность - автозапускаемые функции, но и это можно либо обойти, либо еще что-то придумать. Хотя - хозяин барин, ученого учить только портить и теде ))))
для меня выявились проблемы, такого рода:
во-первых начинаю путаться с загрузкой библиотек, когда веду несколько проектов одновременно.
2) после необходимых переименований приходится еще и переименовывать файлы, потом когда нужно найти функцию, иногда приходится искать по внутреннему тексту в файле.
3) можно вспомнить прогу на delfi от Полещука, для массового поиска и замены по файлам, например если пути жестко зашиты внутри функций или что-то еще зачем так сложно реализовывать Ctrl+H
4) при компиляции возникает куча fas файлов, когда поменял что-то в лисп функции нужно удалить фас перекомпилировать и т.д. А если работаешь весь проект в одном файле то просто загружаешь весь проект в текущий документ одной кнопкой, вобщем все происходит быстрее.
если редактор текстовых файлов не тормозит при хоть 500 тыс строк, зачем выходить за пределы файла если работаешь один!, нужно организовать навигацию внутри файла, чтобы не подвязывать на это еще и операционную систему. А если работаешь не один то нужно уже юзать SVN нормальный. вобщем замучался я с библиотеками, а работать нужно так как кому удобнее.
Sleekka вне форума  
 
Непрочитано 23.06.2013, 22:28
#12
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Sleekka Посмотреть сообщение
при компиляции возникает куча fas файлов, когда поменял что-то в лисп функции нужно удалить фас перекомпилировать и т.д.
Можно же все файлы собрать в проект, а для проекта компилировать один файл fas. Если меняется функция - перекомпилируется вся сборка, заменяется же при этом только один файл.
Я пробовал и в одном файле весь код, и раскидывал проект на много мелких файлов. Второй вариант мне гораздо удобнее. Возможно потому, что я использую только VLIDE.
Do$ вне форума  
 
Непрочитано 24.06.2013, 06:24
#13
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Не надо вести несколько библиотек и путаться с ними. Библиотека должна быть одна, и загружаться всегда. Исходники функций, входящих в библиотеки, должны быть разложены в отдельные файлы. Не кучей в одну папку, а по каталогам. Имена функций - осмысленные. А вот компилироваться должен один библиотечный файл. Для этого надо вести файл проекта, причем не в IDE, а вручную.
Вот фрагмент такого проекта (в полном 1513 строк)
Код:
[Выделить все]
 
;;; VLisp project file [V2.0] ru-lib-main saved to:[C:/ruCAD/_ruSource/Lisp/LIB/FAS] at:[2/15/04] 
(VLISP-PROJECT-LIST
  :NAME
  ru-lib-main
  :OWN-LIST
  (

"app/run/_ru-app-run-srv"

"app/start_stop/ru-app-begin"
"app/start_stop/ru-app-end"
"arc/ru-arc-add"

..
"block/data/ru-block-ent-by-name"
"block/data/ru-block-get-all-def"
"block/data/ru-block-get-array-cfg"
"block/data/ru-block-obj-by-name"
"block/edit/ru-block-purge"
"block/edit/ru-geom-difscale"

"block/insert/ru-block-file-embed"

"block/insert/align/ru-block-insert-align"
"block/insert/multi/_ru-block-multi-insert-scaled-angle0"
"block/insert/multi/_ru-block-multi-insert-scaled-angleask"
"block/insert/multi/from-file/ru-block-insert-noscale-ptask-angleask"
"block/insert/multi/from-lib/ru-block-insert-from-lib"
"block/insert/multi/from-lib/ru-block-insert-from-lib-mousescaleask"
"block/insert/multi/from-lib/ru-block-insert-from-lib-scale1"
"block/insert/multi/from-lib/ru-block-insert-from-lib-scale1-and-ask"
"block/insert/multi/from-lib/ru-block-unit-mm-insert-from-lib"

"block/insert/multi/ru-block-minsert-to-array"
"block/insert/multi/ru-block-multi-insert-scaled-angle0"
"block/insert/multi/ru-block-multi-insert-scaled-angleask"
"block/insert/multi/ru-block-multi-insert-scaled-rotated-or-angleask"
"block/insert/multi/ru-block-insert-dist-count"

"block/insert/single/ru-block-insert-attedit"
"block/insert/single/ru-block-insert-mousescaleask-angleask"
"block/insert/single/ru-block-insert-noattr-scale1-ptask-angleask"
"block/insert/single/ru-block-insert-scaled-angleask"
"block/insert/single/ru-block-insert-scaled-ptask"
"block/insert/single/ru-block-insert-scaled-ptask-angleask"
"block/insert/single/ru-block-insert-command"

"block/is/ru-block-is-exists"
"block/is/ru-block-is-xref"
"block/lib/ru-block-lib-insert"
"block/lw/ru-block-lw-change"
"block/lw/ru-block-lw-edit"
"block/lw/ru-block-lw-insert-ptask-angleask"
"block/lw/ru-block-lw-lib-insert-ptask-angleask"
"block/make/ru-block-din-make"
"block/make/ru-block-make-for-measure"
"block/make/ru-block-obj-add-objects"
"block/make/ru-block-obj-make-def"
"block/make/ru-block-obj-make-def-from-insert"
"block/make/ru-block-obj-make-from-vla-array"
"block/names/descriptions/ru-block-edit-decriptions"
"block/names/descriptions/ru-block-set-description"
"block/names/edit/ru-block-edit-all-names"
"block/names/edit/ru-block-rename"
"block/names/edit/ru-block-rename-with-descr"
"block/names/ru-block-list-all-names-and-decriptions"
"block/names/ru-block-save-all-names-and-decriptions"
"block/names/ru-block-select-name-by-decriptions"
"block/names/ru-block-show-all-names-and-decriptions"
"block/project/ru-block-insert-project"
"block/table/ru-block-insert-table"
"block/unnamed/make/ru-block-anonym-make"
"block/unnamed/make/ru-block-make-unit-unnamed"
"block/unnamed/ru-block-insert-unit-unnamed"
"block/unnamed/ru-block-minsert-unit-unnamed"
"block/write/ru-block-rewrite-with-comment"
"block/write/ru-block-write-block"
"block/write/ru-block-write-with-comment"
...

"dlg/ask/ru-dlg-no"
"dlg/ask/ru-dlg-no-cml"
"dlg/ask/ru-dlg-yes"
"dlg/ask/ru-dlg-yes-cml"
"dlg/ask/ru-dlg-yes-no-cancel"
"dlg/coord/_ru-dlg-coord-edit-2d"
"dlg/coord/_ru-dlg-coord-edit-srv"
"dlg/coord/ru-dlg-coord-edit"
"dlg/dcl/ru-dlg-dcl-get-area"
"dlg/dcl/ru-dlg-dcl-get-string"
"dlg/dcl/ru-dlg-dcl-select-lw"
"dlg/files/_ru-dlg-file"
"dlg/files/_ru-dlg-folder"
"dlg/files/archive/ru-dlg-archive-layers-folder"
"dlg/files/by-note/ru-dlg-file-dual-select-by-note"
"dlg/files/dwg/ru-dlg-file-select-dwg"
"dlg/files/dwg/ru-dlg-file-select-dwg-multi"
"dlg/files/dwg/ru-dlg-file-select-or-new-dwg"
"dlg/files/in-tree/ru-dlg-file-select-in-tree"
"dlg/files/search/ru-dlg-file-search"
"dlg/get/string/ru-dlg-get-string"
"dlg/get/string/ru-dlg-get-two-string"
"dlg/get/number/ru-dlg-get-two-number"
"dlg/get/ru-dlg-get-scale-and-units"
"dlg/get/ru-dlg-get-scale-and-units-and-setup"

"dlg/layer/ru-dlg-select-layer"
"dlg/layer/ru-layer-show-info"
"dlg/layer/ru-layer-show-list-names-comments"
"dlg/layer/ru-layer-edit-list-names-comments"
"dlg/layout/ru-dlg-select-layout"
"dlg/layout/ru-dlg-set-layout"
"dlg/list/double/ru-dlg-double-list"
"dlg/list/double/ru-dlg-dual-list"
"dlg/list/double/ru-dlg-dual-list-select-by-comment"
"dlg/list/single/ru-dlg-show-check-list"
"dlg/list/single/ru-dlg-single-list"

..

"get/angle/ru-get-angle"
"get/attrib/ru-get-attrib-by-name"
"get/block/ru-get-block-name"
"get/block/ru-get-block-name-from-dwg"
"get/color/ru-get-color-from-dwg"

"get/diameter/ru-get-diam-text"
"get/diameter/ru-get-select-pipe-dn"

"get/entsel/ru-get-entsel"
"get/entsel/ru-get-entsel-by-type"
"get/entsel/ru-get-nentsel"
"get/entsel/ru-get-vla-entsel"
"get/hatch/ru-get-hatch-name"
"get/hatch/ru-get-hatch-name-from-dwg"
"get/hatch/ru-get-hatch-scale"
"get/keyword/ru-get-kword"
"get/layer/ru-get-layer-from-dwg"
"get/layer/ru-get-layer-name"
"get/length/ru-get-calc-length"
"get/low-level/_ru-get-ent-default"
"get/low-level/_ru-get-entsel-no-error"
"get/low-level/_ru-get-nentsel-no-error"
"get/low-level/_ru-get-with-default"
"get/low-level/_ru-get-with-default-alt"
"get/low-level/initget/_ru-initget-check"
"get/number/int/ru-get-calc-number"
"get/number/int/ru-get-int"
"get/number/int/ru-get-int-from-dwg"
"get/number/int/ru-get-int-or-pick"
"get/number/real/ru-get-dist"
"get/number/real/ru-get-dist-or-exit"
"get/number/real/ru-get-drag-radius"
"get/number/real/ru-get-real-positive"
"get/orientation/ru-get-is-point-right-by-axis"
"get/point/ru-get-corner-reguired"
"get/point/ru-get-point-on-ent"
"get/point/ru-get-point-and-ang-on-ent"
"get/point/ru-get-point-or-exit"
"get/point/ru-get-point-or-exit-base"
"get/point/ru-get-point-or-lw-or-continue-or-exit"
"get/point/ru-get-point-or-lw-or-exit"
"get/point/ru-get-point-reguired"
"get/point/ru-get-point-with-default"
"get/point/ru-get-point-or-exit-or-kword-base"

"get/point/offset/ru-get-point-in-angle-with-offset"
"get/point/offset/ru-get-segm-line"
"get/point/offset/ru-get-point-or-exit-with-offset"
"get/point/offset/ru-get-point-or-exit-base-with-offset"
"get/point/offset/ru-get-point-reguired-with-offset"
"get/point/offset/ru-get-point-with-offset"
"get/point/offset/ru-get-point-or-exit-or-kword-base-with-offset"

"get/string/from-assoc/ru-get-from-assoc-and-conv"
"get/string/ru-get-string"
"get/string/ru-get-string-cml"
"get/string/ru-get-string-reguired"
"get/string/ru-get-txt-from-dwg"
"get/time/ru-get-time"

"xml/edit/ru-xml-edit"
"xml/low-lewel/_ru-xml-tree-select"
"xml/menu/ru-xml-pop-mnu"
;; "xml/menu/ru-xml-run-exe"
"xml/menu/ru-xml-run-editor"

"xml/storage/ru-xml-storage"

"xml/ru-xml-eval"
"xml/ru-xml-get-att-list"
"xml/ru-xml-get-sdata"
"xml/ru-xml-select-macro"
"xml/ru-xml-help-img"

"xrecord/ru-xrecord-add"
"xrecord/ru-xrecord-delete"
"xrecord/ru-xrecord-get"
"xrecord/ru-xrecord-rebuild"
"xref/ru-xref-attach"
"xref/ru-xref-bind"
"xref/ru-xref-detach"
"xref/ru-xref-list-with-path"
"xref/ru-xref-path-by-short-name"
"xref/ru-xref-short-layer-name"
  )
  :FAS-DIRECTORY
  "c:/ruCAD/Install/LocalAppData/ru/CAD-2008/Libs/App/common"
  :TMP-DIRECTORY
  "c:/ruCAD/_build_tmp"
  :PROJECT-KEYS
  (:BUILD (:standard) :MERGED t :SAFE-MODE t :MSGLEVEL 2)
  :CONTEXT-ID
  :autolisp
) ;_ end of VLISP-PROJECT-LIST

;;; EOF
ShaggyDoc вне форума  
 
Непрочитано 24.06.2013, 09:09
#14
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Зачем "вручную"? Можно и автоматом собирать и автоматом же компилировать (правда, только при условии запуска соответствующей функции из-под VLIDE)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.06.2013, 09:54
#15
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
А вот компилироваться должен один библиотечный файл. Для этого надо вести файл проекта, причем не в IDE, а вручную.
ну вот это круто конечно, но я до такого еще не дошел.
Sleekka вне форума  
 
Непрочитано 24.06.2013, 10:53
#16
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Зачем "вручную"?
Я имел ввиду, что добавлять в такой проект через диалоговые окошки неудобно. Там и относительные имена не ввести, и вообще муторно. Но ведь делается текстовый файл и его удобнее править в текстовом редакторе - хоть в той же IDE. Но руками. Там можно и комментарии писать и что-то отключать.
ShaggyDoc вне форума  
 
Непрочитано 24.06.2013, 23:38
#17
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


у меня все распихано по библиотекам (всего около 30 файлов)
если что-то где-то изменяю, то потом запускаю
Код:
[Выделить все]
 (defun vk_Compile (Dir /)
    (foreach Lsp (vl-directory-files Dir "*.lsp" 1)
	(vlisp-make-file-fas 'LSA (strcat Dir Lsp))
    )
    (princ)
)
vlisp-make-file-fas - умная, одно и то же два раза не компилирует

а если нужно передать проект для "чужих", то есть специальна функция, которая собирает из разных библиотек в один lsp-файл все нужные функции. если кому-то интересно, то выложу
Vov.Ka вне форума  
 
Непрочитано 25.06.2013, 22:44
#18
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


еще один фактор почему я использую такой подход.
В bricscad нету ни проектов ни fas, там есть отдельное приложение которое шифрует лисп.
Так что это делается ради кросплатформенной разработки.
Sleekka вне форума  
 
Непрочитано 26.06.2013, 02:03
#19
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Sleekka Посмотреть сообщение
В bricscad нету ни проектов ни fas, там есть отдельное приложение которое шифрует лисп.
Вообще-то это отдельное приложение и собирает исходники в отдельное приложение, чем-то похожее на vlx
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Редактор VLIDE. Как получить список всех описанных функций открытого в редакторе файла.

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью lisp получить список всех состояний видимости динамического блока crosandr LISP 4 11.04.2012 22:33
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47