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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Find&Replace автоматом

Find&Replace автоматом

Ответ
Поиск в этой теме
Непрочитано 25.03.2005, 13:57 #1
Find&Replace автоматом
plaz
 
Проектирование обустройства нефтяных месторождений
 
Самара
Регистрация: 28.08.2003
Сообщений: 352

Привет всем!
Возникла проблема: есть куча чертежей, выпускаю новую ревизию, в каждом чертеже необходимо заменить определенные тексты. Работать с существующим Find & Replace не очень удобно, т.к. для каждого сеанса необходимо забивать че надо найти и на че надо заменить, и потом еще лазить в комобоксах и искать соответствия. Как можно автоматизировать данную операцию? Причем замену необходимо делать в определенном порядке, чтобы случаем не поменять не нужное
Просмотров: 4467
 
Непрочитано 25.03.2005, 23:45
#2
ZZZ

электрик
 
Регистрация: 11.03.2005
Киев
Сообщений: 157


Прийдёться писать прогу
стандартной команде поиска и замены у меня не получалось передавать данныё и получать результат.

Цитата:
Причем замену необходимо делать в определенном порядке, чтобы случаем не поменять не нужное
Для меня это смахивает на замену индексов кабелей. Тоесть когда необходимо вклинить в середину ещё одну группу. Или просто чтобы при поиске А1 не заменило в строке А12?

есть много критериев поиска и замены?
__________________
Когда под рукой нет ничего кроме молотка - всё вокруг кажется гвоздями...
Выбор правильного инструмента - залог успеха в любом деле.
ZZZ вне форума  
 
Непрочитано 26.03.2005, 00:05
#3
ZZZ

электрик
 
Регистрация: 11.03.2005
Киев
Сообщений: 157


Для упрощения написания проги ответьте на несколько вопросов и приведите пример.
1) В каких объектах искать(MTEXT, TEXT, DIMENSION)?
2) Как вы видете поиск в нескольких файлах?
Поик по закрытым файлам или просто чтобы ваши настройки поиска распространялись на все открытые файлы(более простой способ)
3) Какие критерии поиска (точно, с CASE, определёные окончание и начало поисковой строки)?
4) Предлагать просмотр найденой строки с вопросом о замене (как в стандартной функции)?
__________________
Когда под рукой нет ничего кроме молотка - всё вокруг кажется гвоздями...
Выбор правильного инструмента - залог успеха в любом деле.
ZZZ вне форума  
 
Непрочитано 26.03.2005, 17:44
#4
fixo

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)
fixo вне форума  
 
Автор темы   Непрочитано 28.03.2005, 09:35
#5
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


2ZZZ:
1. Поиск исключительно в Text
2. Искать в закрытых файлах не надо (так сложнее контролировать). Лучше делать замену в данном чертеже.
3. Точно
4. Думаю можно обойтись и без него

Цитата:
Для меня это смахивает на замену индексов кабелей. Тоесть когда необходимо вклинить в середину ещё одну группу. Или просто чтобы при поиске А1 не заменило в строке А12?
В точку.

2Fatty: Не совсем понятно как работает программа. Куда вставлять свои данные?
  • Command: app
    APPLOAD rptx.lsp successfully loaded.


    Command: ; error: malformed list on input

    Command:
    Command: app
    APPLOAD rtx.lsp successfully loaded.


    Command: ; error: bad argument type: stringp nil
plaz вне форума  
 
Непрочитано 28.03.2005, 14:56
#6
fixo

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)
)


Если что - звони
fixo вне форума  
 
Автор темы   Непрочитано 29.03.2005, 07:54
#7
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


2Fatty:
1. Разобрался с первой программой, работает нормально, но это не совсем то, что хотелось, т.к. текст на который заменяем не находится на чертеже.
2. Последняя программа выдает вот такой результат:

Код:
[Выделить все]
Command:
Ввести в командной строке: rtx
Command:
Command: rtx
; error: bad argument type: VLA-OBJECT nil
Можно ли как-то задействовать возможности акадовского Find? Иногда нужно делать замену в атрибутах блоков.
В идеале я себе представляю эту программу таким образом: есть один текстовый файл (или Ёксель файл) в котором любым образом прописано что заменяем и на что заменяем. В данном открытом чертеже программа берет значение "что меняем" строго по порядку, и ищет его в текстах на чертеже (включая атрибуты блоков). Если находит полностью идентичную фразу, то замена без лишних вопросов (хотя можно конечно и вопрос и zoom). В конце обязательно отчет: чаво заменила и скока раз.
plaz вне форума  
 
Непрочитано 29.03.2005, 09:00
#8
ZZZ

электрик
 
Регистрация: 11.03.2005
Киев
Сообщений: 157


2plaz
Проверяли почту?
Не подходит?
ZZZ вне форума  
 
Автор темы   Непрочитано 29.03.2005, 09:38
#9
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


2ZZZ: К сожалению доступа на почту у меня теперь нет. Какие нибудь варианты акромя E-mail еще есть?
plaz вне форума  
 
Автор темы   Непрочитано 30.03.2005, 15:11
#10
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


2ZZZ: попробуй на plaz63@xaker.ru
plaz вне форума  
 
Непрочитано 30.03.2005, 23:30
#11
ZZZ

электрик
 
Регистрация: 11.03.2005
Киев
Сообщений: 157


Для замены маркировки кабеля я использую не простой поиск и замену, а с параметром(подстановкой цифр вместо звёздочки). Мне так удобно.
Это позволяет просто заменить тексты например
"А1, А2, А3, ...А12В "
при поиске "А*" , с параметром от 0 до 100,
замена на "В*" , с параметром от 5 до 105
В итоге получается
"В5, В6, В7, ...А12В "

Таким образом можно просто сместить маркировку групп кабелей в любую сторону увеличения/уменьшения и вклинить в освободившееся пространство другую по назначению группу вручную или такойже заменой. Просто изменить маркировку определённых групп на другой индекс, а освободившееся пространство сдвинуть остатки, чтобы не сбивать нумерацию. При этом оперируешь диапазоном поиска (пакетом), и нет необходимости по десять раз заходить в стандартный поиск.
Привести исходные коды программы пока не могу, идут профилактические работы по усовершенствованию.
При должном оформлении диалогового окна http://zzz-v.narod.ru/photoalbum.html , делается поиск и замена с параметрами легко и удобно. При этом сохраняю настройки диалогового окна (строки поиска, диапазоны параметров, настройки поиска) в общем пространстве автокада, таким образом при переходе в текущей сессии на другой чертеж можно продолжать работу с темиже параметрами.
В принципе можно малость переделать прогу предложенную выше. Ничего очень сложного в этом нет. Можно также сделать поиск по параметрам предоставленным не только цифрами но и буквами, ну это каждому по потребностям.

plaz случайно не это вам нужно?
__________________
Когда под рукой нет ничего кроме молотка - всё вокруг кажется гвоздями...
Выбор правильного инструмента - залог успеха в любом деле.
ZZZ вне форума  
 
Непрочитано 30.03.2005, 23:54
#12
ZZZ

электрик
 
Регистрация: 11.03.2005
Киев
Сообщений: 157


Забыл добавить, что когда заданны диапазоны поиска и замены, то легко контролировать направление(порядок) поика и замены. У меня в итоге получилось три способа задачи параметров и строк поиска и замены - это замена, перемещение и удаление. Просто некоторые исходные данные при разних способов могут повторяться.
__________________
Когда под рукой нет ничего кроме молотка - всё вокруг кажется гвоздями...
Выбор правильного инструмента - залог успеха в любом деле.
ZZZ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Find&Replace автоматом