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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Добавить суффикс в текст

Добавить суффикс в текст

Ответ
Поиск в этой теме
Непрочитано 20.03.2007, 13:28 #1
Добавить суффикс в текст
Neznayka
 
Регистрация: 24.03.2005
Сообщений: 320

Быстрым выбором выбрал целую кучу текста. Как мне, сохраняя старое содержимое добавить префикс (суффикс) к выбранному тексту. Т.е. я выбрал три числа, например: 3, 5, 101, а мне надо соответственно l=3м, l=5м, l=101м.
Просмотров: 9658
 
Непрочитано 20.03.2007, 13:36
#2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


Тексты-то какие? Однострочные, многострочные?
Хмурый вне форума  
 
Непрочитано 20.03.2007, 13:57
1 | #3
VVA

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


Код:
[Выделить все]
;Add Prefix Suffix
;http://forum.dwg.ru/showthread.php?p=126323#post126323
(defun c:AddPS (/ aDoc oldPref oldSuf count dynmode)
(vl-load-com)
(setq dynmode (getvar "DYNMODE"))
(setq aDoc(vla-get-ActiveDocument(vlax-get-acad-object)))
(vl-catch-all-apply
  (function
    (lambda()
(vla-StartUndoMark aDoc)(setvar "DYNMODE" 0) 
(if(not rnm:Pref)(setq rnm:Pref ""))(if(not rnm:Suf)(setq rnm:Suf ""))
(setq oldPref rnm:Pref oldSuf rnm:Suf); end setq
(setq rnm:Pref (getstring T
		 (strcat "\nType prefix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <" rnm:Pref "> :")))
(if(= "" rnm:Pref)(setq rnm:Pref oldPref))(if(= " " rnm:Pref)(setq rnm:Pref ""))
(setq rnm:Suf (getstring T
                (strcat "\nType suffix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"rnm:Suf"> :")))
(if(= "" rnm:Suf)(setq rnm:Suf oldSuf))(if(= " " rnm:Suf)(setq rnm:Suf ""))
(princ "\nSelect text")(setq count 0)  
(if  (setq ss (ssget "_:L" '((0 . "*TEXT"))))
 (foreach item (mapcar 'vlax-ename->vla-object(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   (setq count (1+ count))
   (vla-put-textstring item (strcat rnm:Pref (vla-get-textstring item) rnm:Suf))
   )
  )
(princ (strcat "\n" (itoa count) " texts are processed "))
(vla-EndUndoMark aDoc)
      )
    )
  )
(setvar "DYNMODE" dynmode)
(princ)
  )
(princ "\nType AddPS to run")

Последний раз редактировалось VVA, 19.01.2017 в 12:50. Причина: Добавлено отключение динамического ввода F12
VVA вне форума  
 
Автор темы   Непрочитано 20.03.2007, 14:55
#4
Neznayka


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


Ура все работает.
Вы мне всегда помагаете, СПАСИБО.

Извиняюсь за наглость , а в этот цельнотянутый лисп для нумерации атрибутов в блоке нельзя добавить суффиксы и префиксы
Код:
[Выделить все]
(defun *error* (msg) 
  (if (= msg "Function cancelled") (princ msg)(princ));if 
  (setvar "CMDECHO" cmd) (setvar "PICKAUTO" pca)    
);*error* 
(defun C:KAN ( / ass cmd pca dn n at ast val) 
  (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)) 
   cmd (getvar "CMDECHO") pca (getvar "PICKAUTO") n 0);setq 
  (setvar "CMDECHO" 0) 
  (initget "Number Renumber") 
  (setq kw (getkword "\n[Number/Renumber]? <N>")) 
  (if (null kw) (setq kw "Number")) 
  (if (= kw "Number") (setvar "PICKAUTO" 0)) 
  (setq dn (getint "\nInput Start or Offset Number: <1>")) 
  (if (null dn) (setq dn 1)) 
  (prompt (strcat "\nSelect Blocks for " kw "ing: ")) 
  (ssget) 
  (setq ass (vla-get-ActiveSelectionSet adoc)) 
  (vlax-for sb ass 
   (if (= (vla-get-objectname sb) "AcDbBlockReference") 
     (progn (setq at (car (vlax-safearray->list 
         (vlax-variant-value (vla-getattributes sb)))) 
        ast (vla-get-TextString at) val ast);setq 
      (while (wcmatch val "*@*") (setq val (substr ov 2))) 
      (vla-put-TextString at (strcat (vl-string-right-trim val ast) 
     (if (= kw "Number") (itoa (+ n dn))(itoa (+ (atoi val) dn)))));vla-put 
      (setq n (1+ n)));progn 
     (alert "Oops! It's not a Block!"));if 
  );vlax-for 
 (setvar "CMDECHO" cmd) 
 (setvar "PICKAUTO" pca) 
);end
Если тяжело, то фиг с ним : атрибуты и побить в текст можно...
Еще до этого пробовал обрабатывать напильником в экселе, файл генеренный экспрессовской командой attout. Далее attin...
Neznayka вне форума  
 
Непрочитано 20.03.2007, 15:12
#5
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Команда из пакета ToolPAC
_DSTP_ANNOPRESUF

ToolPac->Annotation->Prefix/Suffix (выбор из меню)
Срабатывает на текст, мтекст и атрибуты.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Автор темы   Непрочитано 20.03.2007, 16:03
#6
Neznayka


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


в русском он не идёт :cry:
Neznayka вне форума  
 
Непрочитано 20.03.2007, 16:14
#7
VVA

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


Возьми отсюда Renum
VVA вне форума  
 
Непрочитано 20.03.2007, 22:20
#8
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Отмечусь и я

http://dwg.ru/dnl/1929

Может многое, и это в том числе
den001 вне форума  
 
Непрочитано 05.10.2012, 10:47
#9
timoshetc


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


добрый день! скачал лисп renum, по ошибке ввел и префикс и суффикс. заново ввожу команду, но по умолчанию все равно остается этот прификс. как это исправить? так же мне не требуется делать нумерацию, а он по умолчанию их нумерует...помогите разобраться плиз
timoshetc вне форума  
 
Непрочитано 05.10.2012, 14:49
#10
VVA

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


Цитата:
Сообщение от timoshetc Посмотреть сообщение
так же мне не требуется делать нумерацию
Команда называется Renum и предназначена для перенумерации
Тебе скорее нужен код из #3
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.10.2012, 10:19
#11
timoshetc


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


VVA, большое спасибо! был не внимателен при прочтении) этот код именно то что нужно.
p.s. если я в коде заменю всплывающие подсказки с английского на русский - он будет работать?
timoshetc вне форума  
 
Непрочитано 09.10.2012, 23:04
#12
VVA

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


Цитата:
Сообщение от timoshetc Посмотреть сообщение
с английского на русский - он будет работать?
ТОлько немного медленее
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.10.2012, 10:05
#13
timoshetc


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


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

Последний раз редактировалось timoshetc, 15.11.2012 в 14:32.
timoshetc вне форума  
 
Непрочитано 19.01.2017, 11:01 Отладка кода
#14
SlavaLu


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


VVA,
У меня тоже пробел не работает... Кроме этого есть проблема с добавлением только суффикса-без префикса это невозможно... Хорошо бы код отладить
SlavaLu вне форума  
 
Непрочитано 19.01.2017, 12:10
#15
VVA

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


Цитата:
Сообщение от timoshetc Посмотреть сообщение
не получается удалить суффикс. приходится закрывать файл и снова его открывать...ввод пробела не помогает
проверил код из #3 - все работает.
Ввод пробела удаляет (очищает) предлагаемое значение по умолчанию для префикса и суффикса.

Цитата:
Сообщение от SlavaLu Посмотреть сообщение
Кроме этого есть проблема с добавлением только суффикса-без префикса это невозможно
Возможно. На запрос префикса вводишь пробел. Код проверял из #3
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.01.2017, 12:31
#16
Кулик Алексей aka kpblc
Moderator

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


Ввод пробела при включенном дин.вводе может приводить к немного неожиданным результатам (см.комментарии к http://autolisp.ru/2012/03/16/user-request/)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.01.2017, 12:46
#17
SlavaLu


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


VVA,
Cпасибо за пояснение, помогло разобраться
SlavaLu вне форума  
 
Непрочитано 19.01.2017, 12:52
#18
VVA

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


Кулик Алексей aka kpblc, Спасибо Алексей. Дело действительно во включенном динамическом вводе. Обновил #3 Добавил отключение динамического ввода на время действия команды
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.01.2017, 13:56
#19
Кулик Алексей aka kpblc
Moderator

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


Я бы на всякий случай добавил проверку на наличие DYNMODE - мало ли где будет код запускаться

----- добавлено через ~14 мин. -----
Позволил себе дополнить #3
Код:
[Выделить все]
 ;;; Add Prefix Suffix
;;; http://forum.dwg.ru/showthread.php?p=126323#post126323
(defun c:addps (/ adoc oldpref oldsuf count sysvar)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (vl-catch-all-apply
    (function
      (lambda ()
        (setq sysvar (vl-remove nil
                                (mapcar (function (lambda (x / tmp)
                                                    (if (setq tmp (getvar (car x)))
                                                      (progn (setvar (car x) (cdr x)) (cons (car x) tmp))
                                                      ) ;_ end of if
                                                    ) ;_ end of lambda
                                                  ) ;_ end of function
                                        '(("sysmon" . 0) ("dynmode" . 0))
                                        ) ;_ end of mapcar
                                ) ;_ end of vl-remove
              ) ;_ end of setq
        (if (not rnm:pref)
          (setq rnm:pref "")
          ) ;_ end of if
        (if (not rnm:suf)
          (setq rnm:suf "")
          ) ;_ end of if
        (setq oldpref  rnm:pref
              oldsuf   rnm:suf
              rnm:pref (getstring t
                                  (strcat "\nType prefix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"
                                          rnm:pref
                                          "> :"
                                          ) ;_ end of strcat
                                  ) ;_ end of getstring
              ) ;_ end of setq
        (if (= "" rnm:pref)
          (setq rnm:pref oldpref)
          ) ;_ end of if
        (if (= " " rnm:pref)
          (setq rnm:pref "")
          ) ;_ end of if
        (setq rnm:suf (getstring t
                                 (strcat "\nType suffix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"
                                         rnm:suf
                                         "> :"
                                         ) ;_ end of strcat
                                 ) ;_ end of getstring
              ) ;_ end of setq
        (if (= "" rnm:suf)
          (setq rnm:suf oldsuf)
          ) ;_ end of if
        (if (= " " rnm:suf)
          (setq rnm:suf "")
          ) ;_ end of if
        (princ "\nSelect text")
        (setq count 0)
        (if (setq ss (ssget "_:L" '((0 . "*TEXT"))))
          (foreach item (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
            (setq count (1+ count))
            (vla-put-textstring item (strcat rnm:pref (vla-get-textstring item) rnm:suf))
            ) ;_ end of foreach
          ) ;_ end of if
        (princ (strcat "\n" (itoa count) " texts are processed "))
        ) ;_ end of lambda
      ) ;_ end of function
    ) ;_ end of vl-catch-all-apply
  (foreach item sysvar (setvar (car item) (cdr item)))
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
(princ "\nType AddPS to run")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 19.01.2017 в 14:11.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.01.2017, 14:38
#20
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ввод пробела при включенном дин.вводе может приводить к немного неожиданным результатам
Вот, оказывается, в чем дело. Изредка пользовался этой программкой и тоже замечал, что
Цитата:
Сообщение от timoshetc Посмотреть сообщение
не получается удалить суффикс. приходится закрывать файл и снова его открывать...ввод пробела не помогает
Поскольку пользовался редко, то разбираться не стал. Однако, я очень привык к динамическим подсказкам возле курсора, и начинаю недоумевать, когда их нет.
Начинаю думать над обходными путями, и приходит на ум вместо пробела вводить что-то другое, например, тире или точку. Внимательный форумчанин заметит, что эти символы могут стать желанными для пользователя в качестве суффикса - и будет прав. Предлагаю вариант со стрелкой вниз (с ключевым словом):
Код:
[Выделить все]
(setq rnm:suf 
	(getstring t
		(strcat "\nType suffix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) [Удалить суффикс] <"
				rnm:suf
				"> :"
		) ;_ end of strcat
	) ;_ end of getstring
) ;_ end of setq
Правда, похоже, при этом станет запретным суффикс "у". Тогда можно использовать в качестве ключевого слово "УДАЛИТЬ" в верхнем регистре, тогда оно не сможет быть суффиксом, но маловероятно, что такой понадобится.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Добавить суффикс в текст