Тема: AutoCAD 2004. Как настроить кодировку в скрипте?

Написал скрипт, который заменяет английский текст Date русским Дата, но после его запуска появился текст Äàòà. Как сделать чтоб скрипт работал правильно?

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

Желательно ответ получить как можно быстрее. У меня AutoCAD 2004.

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

Может, в коде ошибка. А может, дело в фонте не юникодовском. А может, еще в чем.
Где меняет-то? Во всех вхождениях одностроычных и (или) многострочных текстов, в полях, в значениях атрибутов? Вот тебе код, который многострочники и однострочники обработает:

;|=============================================================================
*    Обработка однострочных и многострочных текстов в выборе. Не обрабатываются
* вхождения в блоки и значения атрибутов. Заменяемые слова регистрозависимы.
*    Параметры вызова:
*    eng-word    заменяемое слово
*    rus-word    слово, которое ставится
*    Примеры вызова:
(ch-eng-to-rus "Date" "Дата")    ; замена вхождений слова "Date" на "Дата". Слова
                ; "date", "dAte" и т.п. не заменяются
=============================================================================|;
(defun ch-eng-to-rus (eng-word rus-word / selset item)
  (vl-load-com)
  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of if
  (vla-startundomark *kpblc-activedoc*)
  (setq selset (ssget '((0 . "TEXT,MTEXT"))))
  (while (and selset
          (> (sslength selset 0))
          ) ;_ end of and
    (setq item (ssname selset 0))
    (ssdel item selset)
    (setq item (vlax-ename->vla-object item))
    (if    (vlax-property-available-p item 'textstring t)
      (vla-put-textstring
    item
    (vl-string-subst rus-word eng-word (vla-get-textstring item))
    ) ;_ end of vla-put-TextString
      ) ;_ end of if
    ) ;_ end of while
  (vla-endundomark *kpblc-activedoc*)
  ) ;_ end of defun

P.S. Можно и повежливее себя вести. И поиск посмотреть - не далее как сегодня тема с аналогичными задачами была. Радуйся, что я нашел время.

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

> kpblc
я Работаю с Автокадом сегодня первый раз. Надо сделать замену еще нескольких слов. Куда вводить эту процедуру и чтобы можно было прогнать ее для многих файлов - около 200. И реально ли еще чтобы можно было для разных слов, которые заменяются менять и размер шрифта?

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

Для замены нескольких слов:

(defun c:chw (/ rus eng)
  (setq eng (getstring t "\nВведите слово, которое надо поменять <Отмена> : "))
  (if eng
    (progn
      (setq
    rus (getstring
          t
          (strcat "\nУкажите слово, на которое надо менять " eng " : ")
          ) ;_ end of getstring
    ) ;_ end of setq
      (if rus
    (progn
      (ch-eng-to-rus eng rus)
      ) ;_ end of progn
    ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun

То же самое, но в цикле:

(defun c:cchw (/ rus eng)
  (while (setq
       eng (getstring t "\nВведите слово, которое надо поменять <Отмена> : ")
       ) ;_ end of setq
    (setq rus (getstring
        t
        (strcat "\nУкажите слово, на которое надо менять " eng " : ")
        ) ;_ end of getstring
      ) ;_ end of setq
    (if    rus
      (progn
    (ch-eng-to-rus eng rus)
    ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of while
  ) ;_ end of defun

По поводу "как подгружать и куда записывать":
https://www.caduser.ru/oldlink/faq/?part=44
https://www.caduser.ru/oldlink/faq/?part=023

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

> kpblc
Чего-то не запускается процедура. сохранил ее как lsp файл и добавил в папку Support.
(chw Date Дата)
; error: no function definition: CHW

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

Надо просто chw, слова она сама запросит. Все коды  для простоты закинуть в один файлик и загружать.

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

делаю один файл

(defun ch-eng-to-rus (eng-word rus-word / selset item)
  (vl-load-com)
  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of if
  (vla-startundomark *kpblc-activedoc*)
  (setq selset (ssget '((0 . "TEXT,MTEXT"))))
  (while (and selset
        (> (sslength selset 0))
        ) ;_ end of and
    (setq item (ssname selset 0))
    (ssdel item selset)
    (setq item (vlax-ename->vla-object item))
    (if  (vlax-property-available-p item 'textstring t)
      (vla-put-textstring
  item
  (vl-string-subst rus-word eng-word (vla-get-textstring item))
  ) ;_ end of vla-put-TextString
      ) ;_ end of if
    ) ;_ end of while
  (vla-endundomark *kpblc-activedoc*)
  ) ;_ end of defun
(defun c:chw (/ rus eng)
  (setq eng (getstring t "\nВведите слово, которое надо поменять <Отмена> : "))
  (if eng
    (progn
      (setq
  rus (getstring
        t
        (strcat "\nУкажите слово, на которое надо менять " eng " : ")
        ) ;_ end of getstring
  ) ;_ end of setq
      (if rus
  (progn
    (ch-eng-to-rus eng rus)
    ) ;_ end of progn
  ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
(defun c:cchw (/ rus eng)
  (while (setq
     eng (getstring t "\nВведите слово, которое надо поменять <Отмена> : ")
     ) ;_ end of setq
    (setq rus (getstring
    t
    (strcat "\nУкажите слово, на которое надо менять " eng " : ")
    ) ;_ end of getstring
    ) ;_ end of setq
    (if  rus
      (progn
  (ch-eng-to-rus eng rus)
  ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of while
  ) ;_ end of defun

через Tools-Load Application подгружаю его. (автоматом не грузиться)
Command: chw
Введите слово, которое надо поменять <Отмена> : Date
Укажите слово, на которое надо менять Date : Дата
Select objects: 1 found здесь я выбрал объект - блок
1 was filtered out.
Надо чтобы текст менялся в блоках и объектах MTEXT

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

Так я ж в самом начале предупредил:

kpblc пишет:

*    Обработка однострочных и многострочных текстов в выборе. Не обрабатываются вхождения в блоки и значения атрибутов. Заменяемые слова регистрозависимы.

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

а как сделать чтоб и в блоках заменялись слова?

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

подойдет и другая процедура - только чтоб заменялись слова в блоках и чтобы еще можно было размер текста при этом изменить

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

Заходить внутрь блока и проверять там. Сейчас времени уже нет

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

Я же говорю что работаю только первый раз с AutoCAD и не знаю ничего в LISP. Это же наверно не сложно?:)

Re: AutoCAD 2004. Как настроить кодировку в скрипте?

Иначе мне придется вручную изменять одни и те же фразы в каждом из 200 файлов.