|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Find&Replace автоматом
Проектирование обустройства нефтяных месторождений
Самара
Регистрация: 28.08.2003
Сообщений: 352
|
||
Просмотров: 4468
|
|
||||
электрик Регистрация: 11.03.2005
Киев
Сообщений: 157
|
Прийдёться писать прогу
стандартной команде поиска и замены у меня не получалось передавать данныё и получать результат. Цитата:
есть много критериев поиска и замены?
__________________
Когда под рукой нет ничего кроме молотка - всё вокруг кажется гвоздями... Выбор правильного инструмента - залог успеха в любом деле. |
|||
![]() |
|
||||
электрик Регистрация: 11.03.2005
Киев
Сообщений: 157
|
Для упрощения написания проги ответьте на несколько вопросов и приведите пример.
1) В каких объектах искать(MTEXT, TEXT, DIMENSION)? 2) Как вы видете поиск в нескольких файлах? Поик по закрытым файлам или просто чтобы ваши настройки поиска распространялись на все открытые файлы(более простой способ) 3) Какие критерии поиска (точно, с CASE, определёные окончание и начало поисковой строки)? 4) Предлагать просмотр найденой строки с вопросом о замене (как в стандартной функции)?
__________________
Когда под рукой нет ничего кроме молотка - всё вокруг кажется гвоздями... Выбор правильного инструмента - залог успеха в любом деле. |
|||
![]() |
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Если не автоматом, а ручками (это надежнее)
Первое,что пришло в голову - сохранять на всяк случай замещаемый текст в текстовом файле (к примеру в той же папке и с хвостом по времени, чтоб если что легче искать) А вторая функция заменяет указанный текст текстом из текстового файла (во, наворотил, масло масляно, мня..) ;__________________________________________ (defun C:rtx ( / adoc data_name fldr fname oldeh oldos tail tx1 tx2 txt1 txt2 vrem) (setq oldeh (getvar "CMDECHO")) (setq oldos (getvar "OSMODE")) (setvar "CMDECHO" 0) (setvar "OSMODE" 0) (command "_.undo" "_g") (vl-load-com) (setq fldr (getvar "DWGPREFIX"))) (setq vrem (rtos (getvar "CDATE") 2)) (setq tail (strcat (substr vrem 7 2) "_" (substr vrem 10 4))) (setq data_name (strcat fldr "Text_" tail ".txt")) (setq tx1 (vlax-ename->vla-object (car (entsel "\nПервый текст:\n"))) tx2 (vlax-ename->vla-object (car (entsel "\nВторой текст:\n"))) txt1 (vla-get-textstring tx1) txt2 (vla-get-textstring tx2)) (setq fname (open data_name "w")) (prin1 txt1 fname) (close fname) (vla-put-textstring tx2 txt1) (vla-update tx2) (vla-delete tx1) (command "_.undo" "_e") (setvar "CMDECHO" oldeh) (setvar "OSMODE" oldos) (princ) ) (C:rtx) (princ) ;______________________________________; (defun C:rptx ( / fname rdx tx1 tx2 txt1) (vl-load-com) (setq fname (getfiled "ТЕКСТОВОГО ФАЙЛА :" (getvar "DWGPREFIX") "txt" 8)) (setq fname (open fname "r")) (setq rdx (read-line fname)) (close fname) (setq tx1 (vlax-ename->vla-object (car (entsel "\nпервый текст:\n"))) txt1 (vla-get-textstring tx1)) (vla-put-textstring tx1 rdx) (vla-update tx1) (princ) ) (C:rptx) (princ) |
|||
![]() |
|
||||
Проектирование обустройства нефтяных месторождений Регистрация: 28.08.2003
Самара
Сообщений: 352
|
2ZZZ:
1. Поиск исключительно в Text 2. Искать в закрытых файлах не надо (так сложнее контролировать). Лучше делать замену в данном чертеже. 3. Точно 4. Думаю можно обойтись и без него Цитата:
2Fatty: Не совсем понятно как работает программа. Куда вставлять свои данные?
|
|||
![]() |
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Ну лишнюю скобку ты и сам удалишь, а вот смайлик я не ставил -
там цифра 8. Попробуй такую игрушку: ;_________________________________________; ;; 3/28/05 2:16 PM ;; ;; RepTextDcl.lsp by Fatty ;; Замена части строки всех примитивов ;; "TEXT" рисунка (без проверок) ;; (prompt "\nВвести в командной строке: rtx ") ; Локальные функции (vl-load-com) (defun text_dial () (gc) (setq fname (strcat (getvar "DWGPREFIX") "reptext.dcl")) (setq fn (open fname "w")) (write-line "retext : dialog { label = \"ЗАМЕНА ТЕКСТА :\";" fn) (write-line ": boxed_column {" fn) (write-line ": edit_box { label = \"Что заменить:>>>\";" fn) (write-line (strcat "key = " "\"" "ctx" "\"" ";") fn) (write-line "alignment = centered; width = 48; fixed_height = true;}" fn) (write-line ": edit_box { label = \"На что заменить:>>>\";" fn) (write-line (strcat "key = " "\"" "ntx" "\"" ";") fn) (write-line "alignment = centered; width = 48; fixed_height = true;}" fn) (write-line "spacer_1;" fn) (write-line "}" fn) (write-line "spacer_0;" fn) (write-line "ok_cancel; " fn) (write-line "}" fn) (close fn) ) (defun newstring (old new str) (cond ((vl-string-search old str) (vl-string-subst new old str)) (T str))) (defun rundcl () (setq dcl_id (load_dialog fname)) (if (not (new_dialog "retext" dcl_id)) (exit) ) (action_tile "accept" (strcat "(progn (setq ctx (get_tile \"ctx\"))" "(setq ntx (get_tile \"ntx\"))" " (done_dialog 1))" ) ) (action_tile "cancel" "(done_dialog 0)") (start_dialog) (unload_dialog dcl_id) (done_dialog) (vl-file-delete fname) ) ; Основная функция (defun C:rtx ( / ) (vla-startundomark adoc) (text_dial) (rundcl) (setq ss (ssget "_X" '((0 . "TEXT"))) i -1) (repeat (sslength ss) (setq i (1+ i)) (setq tx (vlax-ename->vla-object (ssname ss i)) txt (vla-get-textstring tx)) (vla-put-textstring tx (newstring ctx ntx txt)) (vla-update tx) (vlax-release-object tx) ) (vla-zoomextents (vla-get-application adoc)) (vla-regen adoc acactiveviewport) (vla-endundomark adoc) (princ) ) Если что - звони |
|||
![]() |
|
||||
Проектирование обустройства нефтяных месторождений Регистрация: 28.08.2003
Самара
Сообщений: 352
|
2Fatty:
1. Разобрался с первой программой, работает нормально, но это не совсем то, что хотелось, т.к. текст на который заменяем не находится на чертеже. 2. Последняя программа выдает вот такой результат: Код:
В идеале я себе представляю эту программу таким образом: есть один текстовый файл (или Ёксель файл) в котором любым образом прописано что заменяем и на что заменяем. В данном открытом чертеже программа берет значение "что меняем" строго по порядку, и ищет его в текстах на чертеже (включая атрибуты блоков). Если находит полностью идентичную фразу, то замена без лишних вопросов (хотя можно конечно и вопрос и zoom). В конце обязательно отчет: чаво заменила и скока раз. |
|||
![]() |
|
||||
Проектирование обустройства нефтяных месторождений Регистрация: 28.08.2003
Самара
Сообщений: 352
|
2ZZZ: попробуй на plaz63@xaker.ru
|
|||
![]() |
|
||||
электрик Регистрация: 11.03.2005
Киев
Сообщений: 157
|
Для замены маркировки кабеля я использую не простой поиск и замену, а с параметром(подстановкой цифр вместо звёздочки). Мне так удобно.
Это позволяет просто заменить тексты например "А1, А2, А3, ...А12В " при поиске "А*" , с параметром от 0 до 100, замена на "В*" , с параметром от 5 до 105 В итоге получается "В5, В6, В7, ...А12В " Таким образом можно просто сместить маркировку групп кабелей в любую сторону увеличения/уменьшения и вклинить в освободившееся пространство другую по назначению группу вручную или такойже заменой. Просто изменить маркировку определённых групп на другой индекс, а освободившееся пространство сдвинуть остатки, чтобы не сбивать нумерацию. При этом оперируешь диапазоном поиска (пакетом), и нет необходимости по десять раз заходить в стандартный поиск. Привести исходные коды программы пока не могу, идут профилактические работы по усовершенствованию. При должном оформлении диалогового окна http://zzz-v.narod.ru/photoalbum.html , делается поиск и замена с параметрами легко и удобно. При этом сохраняю настройки диалогового окна (строки поиска, диапазоны параметров, настройки поиска) в общем пространстве автокада, таким образом при переходе в текущей сессии на другой чертеж можно продолжать работу с темиже параметрами. В принципе можно малость переделать прогу предложенную выше. Ничего очень сложного в этом нет. Можно также сделать поиск по параметрам предоставленным не только цифрами но и буквами, ну это каждому по потребностям. plaz случайно не это вам нужно?
__________________
Когда под рукой нет ничего кроме молотка - всё вокруг кажется гвоздями... Выбор правильного инструмента - залог успеха в любом деле. |
|||
![]() |
|
||||
электрик Регистрация: 11.03.2005
Киев
Сообщений: 157
|
Забыл добавить, что когда заданны диапазоны поиска и замены, то легко контролировать направление(порядок) поика и замены. У меня в итоге получилось три способа задачи параметров и строк поиска и замены - это замена, перемещение и удаление. Просто некоторые исходные данные при разних способов могут повторяться.
__________________
Когда под рукой нет ничего кроме молотка - всё вокруг кажется гвоздями... Выбор правильного инструмента - залог успеха в любом деле. |
|||
![]() |