LISP. Копирование текста из AutoCAD в txt.
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

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

LISP. Копирование текста из AutoCAD в txt.

Ответ
Поиск в этой теме
Непрочитано 04.05.2014, 02:17 #1
LISP. Копирование текста из AutoCAD в txt.
Raznouh
 
Баку, Азербайджан
Регистрация: 13.09.2011
Сообщений: 114

Здравствуйте.
Пытаюсь написать такой код: в открытом файле dwg тыкая на текстовые объекты,их содержимое сохраняется в файле txt ,программно создаваемом на диске С.
Код:
[Выделить все]
 (defun c:t2f()
(setq fo (open "C:\\AutoCAD_TEXT.txt" "a"))
(while
(setq obj (entget(car(entsel "\n Select text you want to copy <ENTER for exit>:"))))
(if (or (= (cdr(assoc 0 obj)) "TEXT") (= (cdr(assoc 0 obj)) "MTEXT")) 
(progn
(setq t1 (cdr(assoc 1 obj )))
(write-line t1 fo)
);end of progn 1
(progn(alert (strcat "Selected object is not TEXT or MTEXT!\n" "Press OK to continue."))
);end of progn 2
);end of if
);end of while
(close fo)
(setq fo nil)
(princ)
 )
При этом если выделяются TEXT(однострочный) объекты - результат нормальный.Если выделяются объекты MTEXT (многострочный),результаты неудовлетворительные.
Например:
\pxqc;{\fArial|b0|i0|c162|p34;CONSTRUCTION OF WATER SUPPLY AND WASTEWATER NETWORKS AND WASTEWATER TREATMENT PLANT .... и т.п.
Т.е. кроме самого текста в файле сохраняются,как я понял,еще какие то обозначения его параметров.
Вопрос: как можно сделать так,чтоб сохранялось ТОЛЬКО содержимое текстового объекта без лишнего мусора?
Заранее спасибо за внимание и отзывы!
Просмотров: 3406
 
Непрочитано 04.05.2014, 08:31
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Ээээ не знаю как это реализовано в Lisp, но в VB.NET удалить форматирование можно так:
Код:
[Выделить все]
                            
Dim acMtext As MText = CType(acEnt, MText)
'очистка текста от форматирования
Dim te As TextEditor = TextEditor.CreateTextEditor(acMtext)
' Просто выбираем всё и удаляем форматирование
te.SelectAll()
te.Selection.RemoveAllFormatting()
' Не забываем сохранить результаты
te.Close(TextEditor.ExitStatus.ExitSave)
Надеюсь это поможет Вам найти решение.
Boxa вне форума  
 
Непрочитано 04.05.2014, 09:30
#3
VVA

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


В версии 1.5 добавлена отдельная команда UNF-MTEXT для удаления форматирования MTEXTa
StripMtext
UnFormat String

----- добавлено через ~11 мин. -----
Может будет полезно Как из lisp запустить еxe?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 04.05.2014, 11:34
#4
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Boxa,VVA
Спасибо за подсказки!Поковыряюсь ,может разберусь как добавить деформатирование к своему коду.
Raznouh вне форума  
 
Непрочитано 04.05.2014, 14:33
#5
VVA

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


Цитата:
Сообщение от Raznouh Посмотреть сообщение
может разберусь как добавить деформатирование к своему коду
По первой ссылке смотри функцию mip_MTEXT_Unformat. пример использования: Как получить MTEXT но без форматирования, только текст?

----- добавлено через ~7 мин. -----
PS Кстати, в мтексте длинная строка хранится не только в dxf группе 1, но и в 3

Цитата:
((-1 . <Имя объекта: 7ef035d0>) (0 . "MTEXT") (330 . <Имя объекта: 7ef01cf8>) (5 . "232") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbMText") (10 1024.15 1594.0 0.0) (40 . 2.5) (41 . 2521.94) (46 . 0.0) (71 . 1) (72 . 5) (3 . "kjrfn j f4jf fenfekn eknf eknf en kene 4 phgotg rgrg o4rg4 gtio 4og 4o g34org3okgrkog ekgfrkogrk rng ongf 4orng 4orn gf34on go34n go34n gog]\\Pr rkn rnfv rfvnrfvnkviogesklvndogj e efjeocrotigkndjnv;skfn nfeknfklf nf feknflknf;lqeknferklnf ek;lnf;elk") (3 . "rn \\P;ekjrgn;e engew ewk;ln genfewkln gfeknf;lknff;lewkfg new gklgewng ;gn ewng ew; gew;fg ;lewkj gewng ewkgnew;kgfnew;kgn\\P;wkg;wn eng ewn ewng ew nf ew fngewklng;lr;wklenrgnew;gnewk;lfng ;ewkngew;kngkrwgn ;erwfg\\P;wlkgnwk ewng ewngewkngwkeng; erwk") (1 . "ngkwnvkngk\\P\\Pdfk fvke klewf gkldfkjgndkjfgn\\Per;kk;l klfnrklfn") (7 . "Standard") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0) (42 . 222.248) (43 . 32.417) (50 . 0.0) (73 . 1) (44 . 1.0))
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 05.05.2014 в 13:47.
VVA вне форума  
 
Автор темы   Непрочитано 04.05.2014, 23:11
#6
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Цитата:
По первой ссылке смотри функцию mip_MTEXT_Unformat. пример использования:
VVA,спасибо - кажись,то что надо!А откуда эта функция?В Полещуке "AutoLISP и Visual LISP в среде AutoCAD" она описывается?
Цитата:
Кстати, в мтексте длинная строка хранится не только в dxf группе 1
Третья группа МТЕКСТа - 3 Additional text (always in 250 character chunks) (optional).Никогда не приходилось ее вытаскивать,поэтому даже представления не имею,что это такое))
Raznouh вне форума  
 
Непрочитано 04.05.2014, 23:15
#7
Кулик Алексей aka kpblc
Moderator

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


Если длина MTEXT больше 250 символов, остаток помещается в группу 1 (может повторяться).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.05.2014, 23:20
#8
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Цитата:
VVA,спасибо - кажись,то что надо!А откуда эта функция?В Полещуке "AutoLISP и Visual LISP в среде AutoCAD" она описывается?
Понял.Я ступил.

----- добавлено через ~5 мин. -----
Цитата:
Если длина MTEXT больше 250 символов, остаток помещается в группу 1 (может повторяться).
kpblc,спасибо !Не знал.

----- добавлено через ~14 мин. -----
Мда...после всего что тут прочитал,перепишу весь код заново.Наверно попробую так: перед тем как вытаскивать из МТЕКСТа группы 1 и 3,предварительно удалять группу 7,а в конце кода возвращать ее на место.
Посмотрим с чем столкнусь.Еще раз спасибо за подсказки!
Raznouh вне форума  
 
Непрочитано 05.05.2014, 10:17
#9
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


1. группы №3 может быть несколько ! (сори, не усмотрел - было в посте VVA)
2. в условие while лучше писать просто entsel а уж потом если оно выполняется - добавлять car, entget и т.д.
3. условие if выполнялось бы быстрее так: (member (cdr (assoc 0 obj)) '("TEXT" "MTEXT")) ... или wcmatch... но если надо убирать форматирование, то использовать (cond ...

может у кого есть идеи как реализовать на лиспе код Boxa ?

а пока что вот мой вариант:
Код:
[Выделить все]
 (defun kd:mtextstring-unformat (str / strparts)
  (defun mtu:sepstr (strline delimiter / strhead strtail poz)
    (if (setq poz (mtu:searchchar delimiter strline))
      (progn (setq strhead (substr strline 1 poz) strtail (substr strline (+ poz 1 (strlen delimiter))))
	(append (list strhead) (mtu:sepstr strtail delimiter)))
      (list strline)
      )
    );defun
  (defun mtu:searchchar (char str / strl poz)
    (setq poz -1)
    (if (and (setq poz (vl-string-search char str (1+ poz))) (= 0 poz))
      (princ)
      (progn (while (and poz (= 92 (vl-string-elt str (1- poz)))) (setq poz (vl-string-search char str (1+ poz)))))
      )
    poz
    );defun
  (setq strparts (apply 'append (mapcar '(lambda (x) (mtu:sepstr x "}")) (mtu:sepstr str "{"))))
  (apply 'strcat (apply 'append
			(mapcar
			  '(lambda (cstr)
			     (mapcar
			       '(lambda (x)
				  (last (sepstr x ";"))
				  )
			       (sepstr cstr "\\")
			       )
			     )
			  strparts
			  )
			)
	 )
  );defun
Код:
[Выделить все]
 (defun sepstr (strline delimiter / strhead strtail poz)
  ;(setq delimiter "\\" strline cstr)
  (if (setq poz (vl-string-search delimiter strline))
    (progn (setq strhead (substr strline 1 poz) strtail (substr strline (+ poz 1 (strlen delimiter))))
      (append (list strhead) (sepstr strtail delimiter)))
    (list strline)
    );if
  );defun

Последний раз редактировалось kakt00z, 05.05.2014 в 16:07.
kakt00z вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Копирование текста из AutoCAD в txt.

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программное создание размерных стилей Кулик Алексей aka kpblc Программирование 96 21.02.2025 13:53
Копирование объектов с нажатой клавишей Ctrl AutoCad 2012 Str0nger AutoCAD 6 17.05.2012 09:51
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27