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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите пожалуйста в написании програмки по поиску и замене текста

Помогите пожалуйста в написании програмки по поиску и замене текста

Ответ
Поиск в этой теме
Непрочитано 14.11.2012, 00:26 #1
Помогите пожалуйста в написании програмки по поиску и замене текста
Hishnik
 
Регистрация: 14.11.2012
Сообщений: 22

Есть расчет здания с множеством значений площади сечения арматуры в разных точка, так вот хотелось бы что бы была возможность нажатием одной кнопки все цифры:
-от "0" и до "20,42" (обычный текст) заменить на надпись "2о16"(два стержня диаметром 16);
-от "20,43" и до "30,15" заменить на "2о18";
-от "30,16" и до "44,32" заменить на "2о20";
-и так далее.
Ну и по возможность новому тексту придать различные цвета
Если есть возможноть помогите решить проблему, либо кто может уже видел програмку или лисп что то на это похожее?


Есть вариант замены через быстрый выбор, но очень долго и приходиться выполнять много однотипных действий.

Вот как это делаю:

1. захожу в быстрый выбор

2. тип объекта(текст); свойста(содержимое); оператор(* Поиск с глобальными символами); Значение([0-9].[0-9][0-9])

3.потом в свойствах выбранного текста меняю на 2∅16 ну и цвет меняю.

Но для того чтобы выбрать предел цифр: 0-20.10 надо выполнить это действие 4 раза, т.е. значение будет менять следующим образом: 1)[0-9].[0-9][0-9]; 2)1[0-9].[0-9][0-9]; 3)20.0[0-9]; 4)20.10.

Вопрос: можно ли это как нибудь автоматизировать написанием макроса в адаптации панели при создании кнопки?

Последний раз редактировалось Hishnik, 14.11.2012 в 11:30.
Просмотров: 7978
 
Непрочитано 14.11.2012, 01:09
#2
Кулик Алексей aka kpblc
Moderator

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


А поискать? Например, так: http://www.google.ru/cse?cx=partner-...%B0&gsc.page=1
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.11.2012, 09:19
#3
Hishnik


 
Регистрация: 14.11.2012
Сообщений: 22


Пробовал. Ни чего у меня не получилось из того что нашел, ну некоторые лиспы не понял как работают.
Hishnik вне форума  
 
Непрочитано 14.11.2012, 09:35
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


А так Batch Find & Replace Text ?

__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.11.2012, 10:43
#5
Hishnik


 
Регистрация: 14.11.2012
Сообщений: 22


Либо я что то не понял в использовании Batch Find & Replace Text, либо незнаю что. У меня автокад виснет и ничего не происходит после нажатия на кнопки ок. Даже создал отдельный файл из 5 одинаковых цыфр и попробовал заменить их, ничего не вышло! попрежнему висит

Последний раз редактировалось Hishnik, 14.11.2012 в 11:29.
Hishnik вне форума  
 
Непрочитано 14.11.2012, 15:05
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Hishnik, У меня так же не получилось. Написал автору
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.11.2012, 16:08
#7
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813



Залей файл черетежа добавь туда тексты, какие нужно определить, из твоих
объяснений не ясно, есть там запятые или это точки в качестве разделителей
И распиши там все подробно прямо на чертеже
Олег (jr.) вне форума  
 
Непрочитано 14.11.2012, 16:24
#8
gomer

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


Самый Простой Вариант
Код:
[Выделить все]
 (defun dxf (asc ent)
;;; возвращает dxf-код примитива или меняет его значение
;;; (dxf '(1 . "hello") (car (entsel)))
  (if (listp asc)
    (dxf
      -1
      (entmod
	(subst
	  (cons (car asc) (cdr asc))
	  (cons (car asc) (dxf (car asc) ent))
	  (entget ent)
	)
      )
    )
    (cond
      ((eq 'ENAME (type ent)) (dxf asc (entget ent)))
      (T (cdr (assoc asc ent)))
    )
  )
)


(defun c:test ()

  ((lambda (adoc)

     (vla-StartUndoMark adoc)

     (foreach en (vl-remove-if
		   'listp
		   (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT")))))
		 )
       (dxf (cons 1
		  ((lambda (num)
		     (cond
		       ((< num 20.43) "2%%c16")
		       ((< num 30.15) "2%%c18")
		       (T "2%%c20")
		     )

		   )
		    (atof (vl-string-subst "." "," (dxf 1 en)))
		  )
	    )
	    en
       )
     )

     (vla-EndUndoMark adoc)

   )
    (progn (vl-load-com)
	   (vla-get-ActiveDocument (vlax-get-acad-object))
    )
  )
  (princ)
)
gomer вне форума  
 
Непрочитано 14.11.2012, 17:15
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Offtop: @gomer
автор не просил написать за него, а просил "помочь в написании" - это несколько разные вещи.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 14.11.2012, 20:16
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от Hishnik Посмотреть сообщение
Либо я что то не понял в использовании Batch Find & Replace Text, либо незнаю что. У меня автокад виснет и ничего не происходит после нажатия на кнопки ок. Даже создал отдельный файл из 5 одинаковых цыфр и попробовал заменить их, ничего не вышло! попрежнему висит
Цитата:
Сообщение от VVA Посмотреть сообщение
Hishnik, У меня так же не получилось. Написал автору
Нужно мышкой выделить что на что меняешь, даже если в списке всего лишь один вариант
Нужно не так а так
Миниатюры
Нажмите на изображение для увеличения
Название: fig1.png
Просмотров: 263
Размер:	32.7 Кб
ID:	90411  Нажмите на изображение для увеличения
Название: fig2.png
Просмотров: 265
Размер:	33.3 Кб
ID:	90412  
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.11.2012, 21:15
#11
Hishnik


 
Регистрация: 14.11.2012
Сообщений: 22


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Залей файл черетежа добавь туда тексты, какие нужно определить, из твоих
объяснений не ясно, есть там запятые или это точки в качестве разделителей
И распиши там все подробно прямо на чертеже
Залил похожий файл тут просто цифры маленькие. в моем случае есть цифры и более 80.00. Для предела значений цифр от 0 до 1.21 для данного расчета допустим соответствует 2 арматуры диаметром 16 (2∅16); для значений от 1.22 до 2.32 - 2∅18; от 2.33 до 3.98 - 2∅20 и т.д.
Т.Е. я хочу заменить каждое число на соответствующий ему диаметр арматуры (2∅16 или 2∅18 или 2∅20 ...) и придать им различные цвета
Значения пределов цифр писал в сообщениях примерно точных не помню, точные значения поставлю сам если подскажете где и как, ну или завтра на работе выпишу их.

Цитата:
Сообщение от gomer Посмотреть сообщение
Самый Простой Вариант
Код:
После прочтения данной статьи http://dwg.ru/art/8 я так и не понял какой командой выполняется лисп, может подскажешь?

Цитата:
Сообщение от hwd Посмотреть сообщение
автор не просил написать за него, а просил "помочь в написании" - это несколько разные вещи.
Ну скорее я неправильно сформулировал тему т.к. не понимаю пока ничего в програмировании, но хотел бы знать столько идей парой бывает а реализовать не могу.

VVA, Тогда не пойму как мне при помощи этой програмки обозначить предел цифр которых я бы хотел заменить на одно значение, если мне надо при помощи мышки выделить заменяемый объект?
Вложения
Тип файла: dwg
DWG 2010
Расчет.dwg (1.47 Мб, 2460 просмотров)

Последний раз редактировалось Hishnik, 14.11.2012 в 21:51. Причина: [quote=hwd;[/quote]
Hishnik вне форума  
 
Непрочитано 14.11.2012, 22:36
#12
gomer

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


hwd, как смог, так и помог, не обессудьте. Если парень смышленый, то разберется и без моей помощи Hishnik, смотри строку 36 моего кода
gomer вне форума  
 
Автор темы   Непрочитано 14.11.2012, 23:22
#13
Hishnik


 
Регистрация: 14.11.2012
Сообщений: 22


Цитата:
Сообщение от gomer Посмотреть сообщение
hwd, как смог, так и помог, не обессудьте. Если парень смышленый, то разберется и без моей помощи Hishnik, смотри строку 36 моего кода
Забыл еще написать при загрузке лиспа выходит вот такое соообщение:
Команда: _appload 1.lsp успешно загружено.
Команда: ; ошибка: синтаксическая ошибка
При вызове команды test:
Команда: TEst
Неизвестная команда "TEST". Для вызова справки нажмите F1.
Про строки 36, 37 и 38 я понимаю это и есть пределы т.е. сперва он меняется все цифры <20.43 на "2%%c16", потом <30.15 на "2%%c18", и все что выше на "2%%c20" и анологичным способом я могу добавить свои строки. Правильно я понял? А придать номера цветов для "2%%c20", "2%%c18", "2%%c16" возмоно как нибудь?
Hishnik вне форума  
 
Непрочитано 14.11.2012, 23:35
#14
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Пробуй код:
https://dl.dropbox.com/u/18024145/CDia.LSP
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 14.11.2012, 23:43
#15
Hishnik


 
Регистрация: 14.11.2012
Сообщений: 22


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Вот что пишет в командной строке, но ничего не меняется:
Команда: _appload 3.lsp успешно загружено.


Команда:
--- Для старта введи cdia или CDIA в командной строке ---
Команда:
Команда: CDIA
._undo Текущие настройки: Авто = Вкл, Управление = Все, Объединить = Есть, Слой
= Есть
Количество отменяемых операций или [Авто/Управление/Начало/Конец/Метка/Обратно]
<1>: _begin
Команда:
Выбрать единичный текст >>
Error: неверная строка режима ssget._undo Текущие настройки: Авто = Вкл,
Управление = Все, Объединить = Есть, Слой = Есть
Количество отменяемых операций или [Авто/Управление/Начало/Конец/Метка/Обратно]
<1>: _end
Hishnik вне форума  
 
Непрочитано 15.11.2012, 00:19
#16
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Автокад русский?
замени одну строку:
(setq se (ssget ":S" '((0 . "text"))));<-- select pattern object
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 15.11.2012, 00:32
#17
Hishnik


 
Регистрация: 14.11.2012
Сообщений: 22


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Автокад русский?
замени одну строку:
(setq se (ssget ":S" '((0 . "text"))));<-- select pattern object
Да русский 2012.
Заменил "(setq se (ssget "+.:S:E:L" '((0 . "text"))));<-- select pattern object" на "(setq se (ssget ":S" '((0 . "text"))));<-- select pattern object".
Опять так же. Попробую завтра на работе может у меня акад какой то глюченный

Команда: _appload 3.lsp успешно загружено.
Команда:
--- Для старта введи cdia или CDIA в командной строке ---
Команда:
Команда: cdia
._undo Текущие настройки: Авто = Вкл, Управление = Все, Объединить = Есть, Слой
= Есть
Количество отменяемых операций или [Авто/Управление/Начало/Конец/Метка/Обратно]
<1>: _begin
Команда:
Выбрать единичный текст >>
Error: неверная строка режима ssget._undo Текущие настройки: Авто = Вкл,
Управление = Все, Объединить = Есть, Слой = Есть
Количество отменяемых операций или [Авто/Управление/Начало/Конец/Метка/Обратно]
<1>: _end
Hishnik вне форума  
 
Непрочитано 15.11.2012, 00:42
1 | #18
Кулик Алексей aka kpblc
Moderator

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


Строку
Код:
[Выделить все]
 (setq se (ssget ":S" '((0 . "text"))))
надо заменить на
Код:
[Выделить все]
 (setq se (ssget "_:S" '((0 . "text"))))
Если мне не изменяет мой склероз
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.11.2012, 00:53
1 | #19
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Спасибо, Алексей наверно так мне не на чем проверить
Олег (jr.) вне форума  
 
Непрочитано 15.11.2012, 01:18
1 | #20
gomer

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


Hishnik, внимательно копируйте код! Вот вам с цветом

Код:
[Выделить все]
 (defun dxf (asc ent)
;;; возвращает dxf-код примитива добавляет или меняет его значение
;;; (dxf '(1 . "hello") (car (entsel)))
  (if (listp asc)
    (dxf
      -1
      (entmod
	(if (dxf (car asc) ent)
	  (subst
	    (cons (car asc) (cdr asc))
	    (cons (car asc) (dxf (car asc) ent))
	    (entget ent)
	  )
	  (cons asc (entget ent))
	)
      )
    )
    (cond
      ((eq 'ENAME (type ent)) (dxf asc (entget ent)))
      (T (cdr (assoc asc ent)))
    )
  )
)


(defun c:test ()

  ((lambda (adoc)

     (vla-StartUndoMark adoc)

     (foreach en (vl-remove-if
		   'listp
		   (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT")))))
		 )

       ((lambda	(lst)
	  (dxf (cons 1 (car lst)) en)
	  (dxf (cons 62 (cdr lst)) en)
	)
	 ((lambda (num)
	    (cond
	      ((< num 20.43) '("2%%c16" . 1))
	      ((< num 30.15) '("2%%c18" . 3))
	      (T '("2%%c20" . 5))
	    )
	  )
	   (atof (vl-string-subst "." "," (dxf 1 en)))
	 )
       )
     )
     (vla-EndUndoMark adoc)

   )
    (progn (vl-load-com)
	   (vla-get-ActiveDocument (vlax-get-acad-object))
    )
  )

  (princ)

)
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите пожалуйста в написании програмки по поиску и замене текста

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Выравнивание текста по двум точкам. Krieger Готовые программы 10 24.12.2011 16:02
Помогите найти перекодировщик текста из юникода в читаемый Михаил5 AutoCAD 10 02.12.2005 18:25
Помогите пожалуйста найти 3d дорожные знаки Julija Автомобильные и железные дороги, мосты, тоннели и организация движения 1 26.08.2005 16:28