Ошибка " *** INTERNAL ERROR: VL namespace mismatch " при выполнении фукции
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ошибка " *** INTERNAL ERROR: VL namespace mismatch " при выполнении фукции

Ошибка " *** INTERNAL ERROR: VL namespace mismatch " при выполнении фукции

Ответ
Поиск в этой теме
Непрочитано 24.02.2013, 20:22 #1
Ошибка " *** INTERNAL ERROR: VL namespace mismatch " при выполнении фукции
Michael!
 
инженер
 
Тамбов
Регистрация: 29.01.2009
Сообщений: 63

Доброго времени суток!
Для поиска и замены текста в чертеже, пользуюсь такой вот функцией.
Код:
[Выделить все]
 
(defun chng (Old$ New$)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vlax-for lt (vla-get-layouts adoc)
    (vlax-for obj (vla-get-block lt)
      (if (eq "AcDbText" (vla-get-objectname obj))
        (while (vl-string-search Old$ (vla-get-textstring obj))
          (vla-put-textstring obj
            (vl-string-subst New$ Old$ (vla-get-textstring obj)))
        )
      )
    )
  )
  (princ)
) ;end defun
При этом все она находит и заменяет хорошо, но возникает сабжевая ошибка при поиске и замене значения более 9 символов. И не важно что это за символы буквы или цифры.
Иногда функция вываливается с ошибкой "; warning: unwind skipped on unknown exception", но тоже ничего не находит и не меняет.
Подскажите, как победить проблему. Я понимаю, что не достаточно места для переменной. Но как и что поменять?
Спасибо!
да, забыл написать, что AutoCAD 2004.
Просмотров: 6471
 
Непрочитано 24.02.2013, 20:33
#2
Кулик Алексей aka kpblc
Moderator

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


Я думаю, что просто сваливает в бесконечный цикл из-за строк
Код:
[Выделить все]
(while (vl-string-search Old$ (vla-get-textstring obj))
	          (vla-put-textstring obj
	            (vl-string-subst New$ Old$ (vla-get-textstring obj)))
Советую поискать на форуме - варианты замены были, и при этом гарантированно работающие.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.02.2013, 21:44
#3
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


Странно все это. А почему тогда при значениях меньше 9-ти знаков для поиска не сваливается?
Michael! вне форума  
 
Непрочитано 24.02.2013, 22:32
#4
Кулик Алексей aka kpblc
Moderator

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


Возможно, повторов нет. Откуда я знаю, какие символы на какие меняются?
P.S. Как вариант - я преобразовываю строку в список, а потом список уже в строку. Работает, как правило, всегда
Код:
[Выделить все]
 (defun _kpblc-conv-string-to-list (string separator / i)
                                  ;|
*    Функция разбора строки. Возвращает список либо точечную пару.
*    Параметры вызова:
*	string		разбираемая строка
*	separator	символ, используемый в качестве разделителя частей
*    Примеры вызова:
(_kpblc-conv-string-to-list "1;2;3;4;5;6" ";")	;'(1 2 3 4 5 6)
(_kpblc-conv-string-to-list "1;2" ";")		;'(1 2)
|;
  (cond
    ((= string "") nil)
    ((vl-string-search separator string)
     ((lambda (/ pos res)
        (while (setq pos (vl-string-search separator string))
          (setq res    (cons (substr string 1 pos) res)
                string (substr string (+ (strlen separator) 1 pos))
                ) ;_ end of setq
          ) ;_ end of while
        (reverse (cons string res))
        ) ;_ end of lambda
      )
     )
    ((wcmatch (strcase string) (strcat "*" (strcase separator) "*"))
     ((lambda (/ pos res _str prev)
        (setq pos  1
              prev 1
              _str (substr string pos)
              ) ;_ end of setq
        (while (<= pos (1+ (- (strlen string) (strlen separator))))
          (if (wcmatch (strcase (substr string pos (strlen separator))) (strcase separator))
            (setq res    (cons (substr string 1 (1- pos)) res)
                  string (substr string (+ (strlen separator) pos))
                  pos    0
                  ) ;_ end of setq
            ) ;_ end of if
          (setq pos (1+ pos))
          ) ;_ end of while
        (if (< (strlen string) (strlen separator))
          (setq res (cons string res))
          ) ;_ end of if
        (if (or (not res) (= _str string))
          (setq res (list string))
          (reverse res)
          ) ;_ end of if
        ) ;_ end of lambda
      )
     )
    (t (list string))
    ) ;_ end of cond
  ) ;_ end of defun
И потом список в строку
Код:
[Выделить все]
 (defun _kpblc-conv-list-to-string (lst sep)
                                  ;|
*    Преобразование списка в строку
*    Параметры вызова:
	lst	обрабатываемй список. Только строковые элементы.
	sep	разделитель. nil -> " "
|;
  (if (and lst
            (setq sep (if sep
                       sep
                       " "
                       ) ;_ end of if
                 ) ;_ end of setq
           ) ;_ end of and
    (strcat (car lst)
            (apply (function strcat)
                   (mapcar
                     (function
                       (lambda (x)
                         (strcat sep x)
                         ) ;_ end of lambda
                       ) ;_ end of function
                     (cdr lst)
                     ) ;_ end of mapcar
                   ) ;_ end of apply
            ) ;_ end of strcat
    ""
    ) ;_ end of if
  ) ;_ end of defun
И после объединения
Код:
[Выделить все]
 (defun _kpblc-string-replace (str old new / pos)
                                   ;|
*    Функция замены вхождений подстроки на новую.
*    Параметры вызова:
*	str	исходная строка
*	old	старая строка
*	new	новая строка
*    Позволяет менять аналогичные строки: "str" -> "'_str'"
|;
  (_kpblc-conv-list-to-string (_kpblc-conv-string-to-list str old) new)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 24.02.2013 в 22:38.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.02.2013, 11:53
#5
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


Спасибо за вариант. Но собственно, зачем такое двойное преобразование? (И не совсем понятно мне использование. исходная и старая строки - они же одинаковые). У меня не заработало. сорри.
У меня изначально идут строки. обычный single line text и все примитивы которые надо заменять такие. multiline text я не использую.
А поменять нужно например такие строки/символы: "socket 0462-209-16" на "socket 0462-203-12" или "АМР 282080-1" на "АМР 282104-1" ну и в таком роде все. Причем ето меняется как в модели, так же и в layouts.
Michael! вне форума  
 
Непрочитано 25.02.2013, 12:08
#6
Кулик Алексей aka kpblc
Moderator

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


Так строки надо менять или символы?
Я-то код предоставил для варианта:
(_kpblc-string-replace "socket 1234-578 socket" "socket" "Sck")
; "Sck 1234-578 Sck"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.02.2013, 12:57
#7
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


нее. мне надо парт номера элементов менять во всех чертежах (layouts) и в модели.
Michael! вне форума  
 
Непрочитано 25.02.2013, 13:01
#8
Кулик Алексей aka kpblc
Moderator

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


Я знаю только один вид парт - школьные.
Цитата:
Сообщение от Michael! Посмотреть сообщение
надо парт номера элементов менять во всех чертежах (layouts) и в модели
А где перевод?
Вообще говоря, похоже, что задача на несколько порядков проще, чем я думал вначале.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.02.2013, 15:30
#9
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


Прошу прощения за некорректность высказывания парт номера они такие (марки делатей).
Смысл такой что надо поменять например марку детали с 12047785 на 12064760. Да в общем это не столь и важно, что обозначают эти данные. Можно считать что это бувенно-цифровая последовательность, просто значения текстового поля. И засенить их надо как я уже писал в модели и на листах (layout) одновременно.
Вот собственно что мне нужно. И в случае когда значение которое нужно заменить, имеет более 9 символов, приведеная выше функция вылетает с ошибкой. Может просто не так понятно объяснил проблему в начале.
Michael! вне форума  
 
Непрочитано 25.02.2013, 16:57
#10
Кулик Алексей aka kpblc
Moderator

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


Полный код свой показывай.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.02.2013, 19:04
#11
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


Вот прикладываю 2 файлика, один лисп, а второй менюшка его dcl. Собственно это вся моя прога.
Вложения
Тип файла: zip rt.zip (942 байт, 30 просмотров)
Michael! вне форума  
 
Непрочитано 25.02.2013, 19:12
#12
gomer

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


Похожая тема
gomer вне форума  
 
Автор темы   Непрочитано 25.02.2013, 19:32
#13
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


Почти, а вообщето нет. В той теме люди не знают что вызывает такую ошибку, в результате чего удаляют все лиспы и иже с ними. Здесь я знаю что вызывает такую ошибку (моя прога) и даже знаю при каких условиях, и прошу помощи в ее редактировании.
Michael! вне форума  
 
Непрочитано 25.02.2013, 21:30
#14
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (vl-load-com)

(defun c:rt (/                        err                      _kpblc-conv-string-to-list
             _kpblc-conv-list-to-string                        _kpblc-string-replace    _kpblc-conv-ent-to-ename
             _kpblc-conv-ent-to-vla   _kpblc-conv-vla-to-list  adoc                     dcl_file
             dcl_handle               dcl_res                  dcl_id
             )

  (defun _kpblc-conv-string-to-list (string separator / i)
                                    ;|
*    Функция разбора строки. Возвращает список либо точечную пару.
*    Параметры вызова:
*	string		разбираемая строка
*	separator	символ, используемый в качестве разделителя частей
*    Примеры вызова:
(_kpblc-conv-string-to-list "1;2;3;4;5;6" ";")	;'(1 2 3 4 5 6)
(_kpblc-conv-string-to-list "1;2" ";")		;'(1 2)
|;
    (cond
      ((= string "") nil)
      ((vl-string-search separator string)
       ((lambda (/ pos res)
          (while (setq pos (vl-string-search separator string))
            (setq res    (cons (substr string 1 pos) res)
                  string (substr string (+ (strlen separator) 1 pos))
                  ) ;_ end of setq
            ) ;_ end of while
          (reverse (cons string res))
          ) ;_ end of lambda
        )
       )
      ((wcmatch (strcase string) (strcat "*" (strcase separator) "*"))
       ((lambda (/ pos res _str prev)
          (setq pos  1
                prev 1
                _str (substr string pos)
                ) ;_ end of setq
          (while (<= pos (1+ (- (strlen string) (strlen separator))))
            (if (wcmatch (strcase (substr string pos (strlen separator))) (strcase separator))
              (setq res    (cons (substr string 1 (1- pos)) res)
                    string (substr string (+ (strlen separator) pos))
                    pos    0
                    ) ;_ end of setq
              ) ;_ end of if
            (setq pos (1+ pos))
            ) ;_ end of while
          (if (< (strlen string) (strlen separator))
            (setq res (cons string res))
            ) ;_ end of if
          (if (or (not res) (= _str string))
            (setq res (list string))
            (reverse res)
            ) ;_ end of if
          ) ;_ end of lambda
        )
       )
      (t (list string))
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-list-to-string (lst sep)
                                    ;|
*    Преобразование списка в строку
*    Параметры вызова:
	lst	обрабатываемй список. Только строковые элементы.
	sep	разделитель. nil -> " "
|;
    (if (and lst
             (setq sep (if sep
                         sep
                         " "
                         ) ;_ end of if
                   ) ;_ end of setq
             ) ;_ end of and
      (strcat (car lst)
              (apply (function strcat)
                     (mapcar
                       (function
                         (lambda (x)
                           (strcat sep x)
                           ) ;_ end of lambda
                         ) ;_ end of function
                       (cdr lst)
                       ) ;_ end of mapcar
                     ) ;_ end of apply
              ) ;_ end of strcat
      ""
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-string-replace (str old new / pos)
                               ;|
*    Функция замены вхождений подстроки на новую.
*    Параметры вызова:
*	str	исходная строка
*	old	старая строка
*	new	новая строка
*    Позволяет менять аналогичные строки: "str" -> "'_str'"
|;
    (_kpblc-conv-list-to-string (_kpblc-conv-string-to-list str old) new)
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-ename (ent_value /)
                                  ;|
*    Функция преобразования полученного значения в ename
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в примитив. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-ename (entlast))
(_kpblc-conv-ent-to-ename (vlax-ename->vla-object (entlast)))
|;
    ;; "_kpblc-conv-ent-to-ename")
    (cond
      ((= (type ent_value) 'vla-object)
       (vlax-vla-object->ename ent_value)
       )
      ((= (type ent_value) 'ename) ent_value)
          ;((= (type ent_value) 'str) (handent ent_value))
      ((= (type ent_value) 'list) (cdr (assoc -1 ent_value)))
      (t nil)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-vla (ent_value / res)
                                ;|
*    Функция преобразования полученного значения в vla-указатель.
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в указатель. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-vla (entlast))
(_kpblc-conv-ent-to-vla (vlax-ename->vla-object (entlast)))
|;
    (cond
      ((= (type ent_value) 'vla-object) ent_value)
      ((= (type ent_value) 'ename) (vlax-ename->vla-object ent_value))
      ((setq res (_kpblc-conv-ent-to-ename ent_value))
       (vlax-ename->vla-object res)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((listp value)
       (mapcar (function _kpblc-conv-vla-to-list) value)
       )
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (_kpblc-conv-vla-to-list (vlax-safearray->list value))
         ) ;_ end of if
       )
      ((and (member (type value) (list 'ename 'str 'vla-object))
            (= (type (_kpblc-conv-ent-to-vla value)) 'vla-object)
            (vlax-property-available-p (_kpblc-conv-ent-to-vla value) 'count)
            ) ;_ end of and
       (vlax-for sub (_kpblc-conv-ent-to-vla value)
         (setq res (cons sub res))
         ) ;_ end of vlax-for
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (setq dcl_file   (strcat (vl-string-right-trim "\\"
                                                 (cond
                                                   ((= (type (setq _tmp (vl-registry-read
                                                                          "HKEY_CURRENT_USER\\Environment"
                                                                          "Temp"
                                                                          ) ;_ end of vl-registry-read
                                                                   ) ;_ end of setq
                                                             ) ;_ end of type
                                                       'list
                                                       ) ;_ end of =
                                                    (strcat (getenv "USERPROFILE")
                                                            (vl-string-left-trim
                                                              "%USERPROFILE%"
                                                              (strcase
                                                                (cdr
                                                                  _tmp
                                                                  ) ;_ end of cdr
                                                                ) ;_ end of strcase
                                                              ) ;_ end of vl-string-left-trim
                                                            ) ;_ end of strcat
                                                    )
                                                   ((= (type _tmp) 'str) _tmp)
                                                   (t (getenv "TEMP"))
                                                   ) ;_ end of cond
                                                 ) ;_ end of vl-string-right-trim
                           "\\dlg.dcl"
                           ) ;_ end of strcat
        dcl_handle (open dcl_file "w")
        ) ;_ end of setq
  (foreach item '("dlg : dialog {"                                "	label = \"Input parameters\" ;	"
                  "	: column {	"                         "	: row {	"
                  "		: text {label = \" RT\";}	" "	}	"
                  "	: row {	"
                  "		: text {width = 30; fixed_width = false; label = \" Part number >>  \";}	"
                  "		: edit_box {key = ek0; width = 20; fixed_width = true; value = \"\";}	"
                  "		: edit_box {key = e0; width = 20; fixed_width = true; value = \"\";}"
                  "		}"                                "	: row {	"
                  "		: text {label = \"  \";}	" "	}"
                  "	: row {	"                                 "		: text {label = \"  \";}	"
                  "	}"                                        "}"
                  "ok_cancel;"                                    "}"
                  )
    (write-line item dcl_handle)
    ) ;_ end of foreach
  (close dcl_handle)
  (setq dcl_id (load_dialog dcl_file))
  (new_dialog "dlg" dcl_id)
  (action_tile "ek0" "(setq codeh1old $value)")
  (action_tile "e0" "(setq codeh1new $value)")
  (action_tile "cancel" "(done_dialog 0)")
  (action_tile "accept" "(done_dialog 1)")
  (setq dcl_res (start_dialog))
  (unload_dialog dcl_id)
  (if (and (= dcl_res 1)
           (/= codeh1old codeh1new)
           ) ;_ end of and
    (progn
      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
      (setq layers (mapcar
                     (function
                       (lambda (x)
                         (list x
                               (mapcar
                                 (function
                                   (lambda (prop / tmp)
                                     (setq tmp (vlax-get-property x (car prop)))
                                     (vl-catch-all-apply
                                       (function
                                         (lambda ()
                                           (vlax-put-property x (car prop) (cdr prop))
                                           ) ;_ end of LAMBDA
                                         ) ;_ end of function
                                       ) ;_ end of VL-CATCH-ALL-APPLY
                                     (cons (car prop) tmp)
                                     ) ;_ end of LAMBDA
                                   ) ;_ end of function
                                 (list (cons "lock" :vlax-false) (cons "freeze" :vlax-false))
                                 ) ;_ end of mapcar
                               ) ;_ end of list
                         ) ;_ end of LAMBDA
                       ) ;_ end of function
                     (vl-remove-if
                       (function
                         (lambda (x)
                           (wcmatch (strcase (vla-get-name x)) "*|*")
                           ) ;_ end of LAMBDA
                         ) ;_ end of function
                       (_kpblc-conv-vla-to-list (vla-get-layers adoc))
                       ) ;_ end of vl-remove-if
                     ) ;_ end of mapcar
            ) ;_ end of setq
      (foreach blk_def (vl-remove-if
                         (function
                           (lambda (x)
                             (equal (vla-get-isxref x) :vlax-true)
                             ) ;_ end of lambda
                           ) ;_ end of function
                         (vl-remove nil
                                    (mapcar
                                      (function
                                        (lambda (x)
                                          (cond
                                            ((equal (vla-get-modelspace adoc) x) x)
                                            ((and (equal (vla-get-islayout x) :vlax-true)
                                                  (vlax-property-available-p x 'block)
                                                  ) ;_ end of and
                                             (vla-get-block x)
                                             )
                                            ((or (equal (vla-get-isxref x) :vlax-true)
                                                 (and (equal (vla-get-islayout x) :vlax-true)
                                                      (not (vlax-property-available-p x 'block))
                                                      ) ;_ end of and
                                                 ) ;_ end of or
                                             nil
                                             )
                                            (t x)
                                            ) ;_ end of cond
                                          ) ;_ end of lambda
                                        ) ;_ end of function
                                      (_kpblc-conv-vla-to-list (vla-get-blocks adoc))
                                      ) ;_ end of mapcar
                                    ) ;_ end of vl-remove
                         ) ;_ end of vl-remove-if
        (vlax-for ent blk_def
          (if (= (vla-get-objectname ent) "AcDbText")
            (if (vl-catch-all-error-p
                  (setq err (vl-catch-all-apply
                              (function
                                (lambda ()
                                  (vla-put-textstring ent
                                                      (_kpblc-string-replace (vla-get-textstring ent)
                                                                             codeh1old
                                                                             codeh1new
                                                                             ) ;_ end of _kpblc-string-replace
                                                      ) ;_ end of vla-put-TextString
                                  ) ;_ end of LAMBDA
                                ) ;_ end of function
                              ) ;_ end of VL-CATCH-ALL-APPLY
                        ) ;_ end of setq
                  ) ;_ end of VL-CATCH-ALL-ERROR-P
              (princ (strcat "\nError : object " (vla-get-objectname ent) " : " (vl-catch-all-error-message err)))
              ) ;_ end of if
            ) ;_ end of if
          ) ;_ end of vlax-for
        ) ;_ end of foreach
      (foreach item layers
        (foreach prop (cdr item)
          (vl-catch-all-error-p
            (function
              (lambda ()
                (vlax-put-property (car item) (car prop) (cdr prop))
                ) ;_ end of lambda
              ) ;_ end of function
            ) ;_ end of vl-catch-all-error-p
          ) ;_ end of foreach
        ) ;_ end of foreach
      (vla-endundomark adoc)
      (princ)

      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.02.2013, 21:41
#15
gomer

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


да уж, код мягко говоря, не очень, начиная с обработки диалога, кончая многократной записью и чтением примитива в цикле, и еще попробуйте поменять имена параметров функции chng
gomer вне форума  
 
Непрочитано 25.02.2013, 21:44
#16
Кулик Алексей aka kpblc
Moderator

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


Мне было лень переразбирать весь код... Проще новый написать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.02.2013, 00:42
#17
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


Слишком круто! Спасибо! И многое из написанного не понятно. Завтра проверю на файле. Отпишусь тогда.
Поясни, а зачем нужно преобразвание текста в список и обратно? Не думал, что поиск и замена текста будет такой глобальной проблемой. По форуму поиск интересующих меня результатов не дал. Может есть какой-то более легкий вариант поиска/замены?
А вот фукция _find интересно как работает? Она виндовозная?
Спасибо!
Michael! вне форума  
 
Непрочитано 26.02.2013, 09:30
#18
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Michael! Посмотреть сообщение
зачем нужно преобразвание текста в список и обратно?
Мне так проще. Особенно учитывая, что иногда приходится менять, например, "-" на "->". Другие варианты иногда выдавали неверные результаты.
Цитата:
Сообщение от Michael! Посмотреть сообщение
Не думал, что поиск и замена текста будет такой глобальной проблемой.
Для кого? Я один раз написал библиотечные функции и использую их по мере надобности. Подробнее о таком подходе см. "САПР на базе AutoCAD - как это делается".
Цитата:
Сообщение от Michael! Посмотреть сообщение
Может есть какой-то более легкий вариант поиска/замены?
Может, и есть Но я нашел свой гарантированно работающий вариант, и менять его пока причин не вижу
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.02.2013, 11:01
#19
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


Спасибо. все работает, ошибок не выдает. но в Layouts ничего не происходит. находит и меняет текст только в модели.
Michael! вне форума  
 
Непрочитано 26.02.2013, 11:08
#20
Кулик Алексей aka kpblc
Moderator

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


Образец в студию!
И какие значения устанавливал для замены
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.02.2013, 12:55
#21
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


Образец чего?
Ну например решил поменять дату для начала на layouts с 00/00/00 на 26/02/13. не поменяла. для теста в модели - сменила.
Ты вот в начале умную мысль сказал, а я особо и не обратил внимания, что цикл в засисон бесконечный уходит. Я проверил, и ведь действительно уходит. Только при условии, что я задаю поменять значение "типа само на себя", например есть выражеине "Connector TYCO p/n", а я хочу его заменить на "Connector TYCO p/n C-0480698-10-3". Значит прога моя-то что делает? - Ищет первое выражение и меняет на второе. После нескольких циклов получается такая вот фигня "Connector TYCO p/n C-0480698-10-3 C-0480698-10-3 C-0480698-10-3" ну и т.д.
Может знаешь, как ей это условие прописать, чтобы она так не делала?

Добавлено через некоторое время раздумий:
Помоему я нашел как обойти это (может не совсем правильно с точки зрения лиспа):
Я добавил промежуточную замену. Тоесть "Connector TYCO p/n" я меняю на произвольную неповторяющуюся последовательность "9797979", а ее уже меняю на "Connector TYCO p/n C-0480698-10-3".
Код:
[Выделить все]
 
(progn
	(chng Old$ "9797979")
	(chng "9797979" New$)
;	(chng Old$ New$)
) ;progn
Пока вроде работает без зависов.

Последний раз редактировалось Michael!, 26.02.2013 в 14:06.
Michael! вне форума  
 
Непрочитано 27.02.2013, 13:00
#22
Кулик Алексей aka kpblc
Moderator

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


Я ж предлагал:
Код:
[Выделить все]
 _$ (repeat 163 (_KPBLC-STRING-REPLACE "Connector TYCO p/n" "Connector TYCO p/n" "Connector TYCO p/n C-0480698-10-3"))
"Connector TYCO p/n C-0480698-10-3"
И файл dwg так и не предоставлен.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.02.2013, 21:16
#23
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


К сожалению файл рабочего чертежа выложить не смогу. Слишком много данных.
А по поводу программы - я продолжаю использовать свою, благо с твоей помощью пофиксил проблему. Твоя в резерве.
Спасибо за помощь! А прогу твою и мою может есть смысл выложить на всеобщее использование? Вдруг кому что менять потребуется. Часто встречаются такие вопросы судя по поиску. А эту тему думаю что можно закрывать.
Michael! вне форума  
 
Непрочитано 27.02.2013, 21:33
#24
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Michael! Посмотреть сообщение
К сожалению файл рабочего чертежа выложить не смогу. Слишком много данных.
Я не просил весь файл. Было бы достаточно куска: пара-тройка текстов с заменяемыми частями в модели, еще три-четыре "пустых" (там же), ну и до кучи с десяток текстов по листам раскиданных.
Цитата:
Сообщение от Michael! Посмотреть сообщение
А прогу твою и мою может есть смысл выложить на всеобщее использование?
Так оно и так в общем доступе. Хочешь - выкладывай, потому как моя поделка на нормальную прогу не тянет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.02.2013, 11:30
#25
Michael!

инженер
 
Регистрация: 29.01.2009
Тамбов
Сообщений: 63


А моя думаешь тянет? Единственное преимущество - что она короткая.
Файлик тогда в конце дня обрежу и вышлю. Сейчас пока не сижу на месте.
Michael! вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ошибка " *** INTERNAL ERROR: VL namespace mismatch " при выполнении фукции



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Ошибка: "\n*** INTERNAL ERROR: VL namespace mismatch\n"" type Y to reset: misht AutoCAD 8 13.07.2012 10:10
Несоответствие результатов в Лире s.vas Лира / Лира-САПР 19 11.11.2009 07:31
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47
Ошибка INTERNAL ERROR при работе в пространстве листа Sel AutoCAD 2 12.10.2005 11:19