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

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

Dataextraction. Изменение ссылки на dwg файл.

Ответ
Поиск в этой теме
Непрочитано 03.09.2016, 03:49 #1
Dataextraction. Изменение ссылки на dwg файл.
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,974

Описываемая ниже “проблема” имеет место при использовании dataextraction для типовых проектов.

Ситуация:
1. В Папке-1 создаем "Чертеж-1.dwg".
2. В Чертеже-1 создаем несколько таблиц с dataextraction отображающих данные о объектах находящихся в самом чертеже-1 (назовем их "Таблица-1.dxe", "Таблица-2.dxe"… "Таблица-99.dxe").
3. Файлы dxe кладем в одну папку с чертежом (Папка-1).
4. В Чертеже-1 меняем путь к файлам dxe с абсолютного на релятивный.
5. Копируем и переименовываем Папку-1 в Папку-2.
6. Переименовываем скопированный чертеж на "Чертеж-2.dwg".
7. Скопированные таблицы не переименовываем.
8. В чертеже-2 у нас уже есть настроенные и вставленные ранее таблицы.
9. В чертеже-2 делаем новый проект, и хотим отобразить информацию о новых объектах в имеющихся таблицах с dataextraction.

В таком случае все dataextraction в Чертеже-2 продолжат ссылаться на объекты в Чертеже-1.
Придется по очереди перенастроить путь к которому ссылаются dataextraction.
Для каждой dataextraction нужно пройти заново через Data Extraction Wizard, при этом в самом начале можно удалить ссылку на Чертеже-1 и добавить текущий проект (Чертеж-2), все остальные шаги проходим без изменений.
Как видим, при наличии множества dataextraction это занимает немало времени. У меня, к примеру, есть пара – тройка таблиц на каждый этаж перекрытий.
Пробовал внешним редактором произвести Find and Replace всех упоминаний о исходном файле на адрес нового файла в файлах dxe (ведь по сути их можно обычным блокнотом редактировать), но, по-видимому, что-то пропускаю, так как при этом dataextraction перестает работать.
Нашел в dxe файлах 5 ссылок на dwg файл:
¬D:\.....Папка-1\Чертеж-1.dwg (упоминается дважды)
d:\ .....папка-1\чертеж-1.dwg (упоминается единожды)
\чертеж-1.dwg (упоминается дважды)

Бездиалоговая версия команду (-dataextraction) к сожалению, кастрирована и не пригодна для данной задачи.
Если кто-то предложит решение по обновлению ссылки на файл в файлах dataextraction был бы весьма благодарен.

Последний раз редактировалось Red Nova, 03.09.2016 в 17:01.
Просмотров: 3853
 
Непрочитано 03.09.2016, 15:38
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,984


у меня есть смутное подозрение, что еще в самом файле dwg в словарях или где еще прописывается связь (datalink). Поэтому редактирование внешнего dxe не дает нужного эффекта.
Сергей812 вне форума  
 
Непрочитано 03.09.2016, 20:41
#3
Кулик Алексей aka kpblc
Moderator

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


Red Nova, поскольку вопрос в "Программировании", показывай свой код.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.09.2016, 21:06
#4
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


А куда мне задать этот вопрос? Кроме программирования возможно другое решение?
Хотя сомнительно что решение вообще есть...
Red Nova вне форума  
 
Непрочитано 03.09.2016, 21:18
#5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,984


Нефига нет. Один из первых трех результатов поиска на форуме по "dxe"
Сергей812 вне форума  
 
Непрочитано 03.09.2016, 21:50
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,799
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Dictedit есть еще здесь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.09.2016, 22:44
#7
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
у меня есть смутное подозрение, что еще в самом файле dwg в словарях или где еще прописывается связь (datalink). Поэтому редактирование внешнего dxe не дает нужного эффекта.
Попробовал подменить исходный файл "Чертеж-1" на другой.
То есть если продолжить на примере из первого поста. Как помним там мы уже имеем "Чертеж-1" и "Чертеж-2". (В "Чертеже-2" dataextraction отображает информацию о "Чертеже-1").
Беру любой другой готовый чертеж, переименовываю его в "Чертеж-1". Удаляю старый "Чертеж-1" и вставляю на его место новый. При этом в "Чертеже-2" при обновлении dataextraction данные отображаются о объектах в подмененном "Чертеже-1".
Таким образом выясняем, что файлам dataextraction (dxe) безразлично есть о них информация в чертеже или нет. Их интересует только адрес и название чертежа.


Цитата:
Сообщение от VVA Посмотреть сообщение
Dictedit есть еще здесь
Разве Dictedit может чем-то в данном вопросе помочь? Или я что-то пропустил?

Последний раз редактировалось Red Nova, 04.09.2016 в 00:11.
Red Nova вне форума  
 
Непрочитано 04.09.2016, 00:17
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,984


посмотрел на структуру dxe - больше похоже на какой то симбиоз бинарного (или сериализация) файла и xml-структуры. Видимо, проще свое извлечение данных написать-чем возиться с этим проприетарным форматом)
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.09.2016, 02:05
#9
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


Экспериментируя с файлами dataextraction обнаружил, что даже если просто открыть dxe файл в блокноте и не изменяя ничего сохранить файл - то таблица в каде перестает распознавать dxe файл. При этом переименование на распознавание не влияет. Получается что при распознавании связи с dxe файлами акад сверяет кроме пути и имени файла также и дату изменения документа.
Копаем дальше
Миниатюры
Нажмите на изображение для увеличения
Название: external references.PNG
Просмотров: 17
Размер:	20.1 Кб
ID:	175615  

Последний раз редактировалось Red Nova, 04.09.2016 в 02:12.
Red Nova вне форума  
 
Непрочитано 04.09.2016, 02:21
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,984


сравните побайтно эти два dxe файла. И в какой кодировке сохраняете еще
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.09.2016, 04:42
#11
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


Попробовал после сохранения сжульничать и при помощи BulkFIleCHanger поменять дату сохранения обратно. Не помогло.
Оригинальный и файл dxe и файл описанный в #9 (тот что сохранен блокнотом не изменяя ничего в нем) по содержанию полностью идентичны (проверял).
Свойства после редактирования даты сохранения в BulkFIleCHanger также совпадают (разница только в дате создания, но тут нет разницы, ведь скопированный в бекап файл имея новую дату создания после переименования работает нормально). Блокнот++ показывает что система кодирования для обоих ANSI.
Кто решит загадку, чем еще могут отличаться два таких файла? Ведь один из них распознается как dataextraction а второй - нет. Прикрепляю их и файл на который они ссылаются. Перед проверкой нужно переименовать нерабочий файл dxe в Таблица-1.
Вложения
Тип файла: rar dataextraction.rar (38.0 Кб, 9 просмотров)
Red Nova вне форума  
 
Непрочитано 04.09.2016, 09:10
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,984


Не сильно dxe одинаковы -147 различий)
Миниатюры
Нажмите на изображение для увеличения
Название: Сравнение файлов.JPG
Просмотров: 31
Размер:	181.7 Кб
ID:	175619  
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.09.2016, 15:39
#13
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


Хммм... А diffchecker выдает что документы идентичны.
Миниатюры
Нажмите на изображение для увеличения
Название: diffchecker.PNG
Просмотров: 20
Размер:	41.8 Кб
ID:	175632  
Red Nova вне форума  
 
Непрочитано 04.09.2016, 15:54
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,984


там произошла везде замена нулевого значения 0х00 на пробел 0х20 - возможно, для diffchecker идентичные коды.
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.09.2016, 16:15
#15
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


Получилось, спасибо Сергей812 за наводку!
До того я сохранял файл обычным блокнотом. При этом, как оказалось, он заменял все символы NUL на пробел. Не знаю с чем именно это связанно, но факт (наверное все таки кодировка, хотя и Notepad++ выдает для обоих ANSI). Моя проверялка этого не замечала. Но стоит открыть оба файла в Notepad++ как на первом же символе в файле видна подмена.
Теперь можно вернуться к первому посту

Уже в Notepad++ провел Find and Replace всех упоминаний о Чертеже-1 на Чертеж-2. Notepad++ правда показывает кириллицу кракозядрами, но это не важно.

Было:
D:\BMP Sep 02\CADA\Чертеж-1.dwg
\Чертеж-1.dwg
d:\bmp sep 02\cada\чертеж-1.dwg

Стало:
D:\BMP Sep 02\CADA\Чертеж-2.dwg
\Чертеж-2.dwg
d:\bmp sep 02\cada\чертеж-2.dwg

После этого все заработало. В Чертеже-2 таблица теперь отображает данные о объектах в Чертеже-2, как и требовалось. (и менять дату сохранения не потребовалось)

Таким образом вырисовывается необходимый код для обновления всех ссылок dataextraction на текущий чертеж.
В папке с чертежом нужно найти все dxe файлы, открыть их, найти в них упоминания об исходном файле и заменить на путь с открытому файлу. Сохранение провести так, чтобы с кодировкой ничего не поменялось.

Вопрос программистам. Такое вообще возможно из акада?
Red Nova вне форума  
 
Непрочитано 04.09.2016, 16:28
#16
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,984


такое возможно из чего угодно - если файл будет доступен на запись
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.09.2016, 18:58
#17
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


Тогда помогайте код настругать
Вот что у меня пока получилось.

Код:
[Выделить все]
 (defun C:test ( / file content)

  (setq file (open (findfile "hello.txt") "r"))
  (while (setq content (read-line file))
       (if (wcmatch content "*XXX*")
         (princ (strcat "Found a match: " content "\n"))
         ); if
       ); while
  (princ)

  (close file)
  ); end of defun
Экспериментирую пока с файлом "hello.txt" . Записал в него несколько строчек. Некоторые из них содержат XXX, что требуется заменить на YYY. Пока сумел при помощи кода выше открыть нужный файл, прочитать его и найти строчки содержащие XXX. Подскажите как дальше можно изолировать XXX от строчки и заменить на YYY.
Red Nova вне форума  
 
Непрочитано 04.09.2016, 19:17
#18
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,984


а удастся ли вообще лиспом корректно прочитать данный файл dxe? У лиспа вижу две команды - прочитать строку и прочитать символ. Попробуйте натравить свой код, изменив просто на чтение строки-вывод в костроку и посмотреть-будет ли что то осмысленное выходить на отдельных строчках.
Сергей812 вне форума  
 
Непрочитано 04.09.2016, 19:30
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,799
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Red Nova Посмотреть сообщение
1. В Папке-1 создаем "Чертеж-1.dwg".
Цитата:
Сообщение от Red Nova Посмотреть сообщение
Уже в Notepad++ провел Find and Replace всех упоминаний о Чертеже-1 на Чертеж-2. Notepad++ правда показывает кириллицу кракозядрами, но это не важно.
Вдруг подумалось. Ты же в Торонто. Откуда русский? Если файлы на латинице, то, как минимум, геморрой с кодировкой отпадет.
А так как вариант можно
1. Попробовать заменить текст с помощью соответствующей программы, например UV FilesCorrector
2.
Read/Write Binary Files
About read and write binary file
Read / Write Stream
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 05.09.2016, 04:27
#20
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


Продолжая развитие кода с #17...
Как я понял, одновременно читать и писать в один и тот же файл проблематично. Я сделал код который копирует содержание одного текстового файла в другой (в пустой шаблон) и при этом заменяет искомое текстовое значение (ХХХ в примере) на новое (YYY). Код работает с файлами txt. К сожалению с dxe файлом не прокатило. Обработались только несколько строчек.

Код:
[Выделить все]
 
(defun C:test ( / fileR fileW)

  (vl-load-com)
    (progn

      (setq

           fileR (open (findfile "hello.txt") "r")

           fileW (open (findfile "goodby.txt") "w")

        ); setq

      (while

        (setq readline (read-line fileR))
        (while (vl-string-search "XXX" readline)

          (setq readline (vl-string-subst "YYY" "XXX" readline))

        ); while

        (write-line readline fileW)

      ); while
    ); progn

  (close fileR)

  (close fileW)

); defun

VVA
Русский в наименованиях файлов dwg и dxe тут не при чем. Первые тесты что я делал были полностью с английскими файлами. И естественно все мои рабочие файлы также будут на инглише. Я использовал русский только для примера на форуме, так сказать из солидарности )). Другой вопрос что я в винде выставил язык русский, иначе все имеющиеся у меня лиспы с кириллицей (и многое другое) отображались кракозябрами. Уж не знаю точно что на что нам влияет. Мои познания в системах кодирования уж больно скромны.

По пункту 1.
Ранее я пробовал использовать Ecobyte Replace Text для данной цели, и пользы не было (хотя может я и сам напортачил). Сейчас попробовал с UV FilesCorrector и все получилось. Так что можно считать что с применением сторонней отдельной программы вопрос решен. Естественно это не самое удобное решение и хотелось бы иметь функцию в акаде. Но иемя действительно много dxe файлов - это действительно облегчает труд. Кстати, обнаружил, что вместо ранее предполагаемых трех операций find and replace достаточно произвести две, так как адрес файла прописанный в lower case (сорри не помню как по русски) может быть заменен и обычным путем, на результат это не влияет (то есть вместо строки d:\ .....папка-2\чертеж-2.dwg можно записать на D:\ .....Папка-2\Чертеж-2.dwg).

По пункту 2.
Не пойму пока как использовать функции по ссылке с твоего поста LM:WriteBinaryStream и LM:ReadBinaryStream ?
Вот моя нерабочая версия․ Пока эксперименты на файлах txt (txt ведь тоже по сути текставой а не бинарный файл, но ведь это тут не важно?)

Код:
[Выделить все]
 (defun C:test (/ fileR fileW buff)
  (vl-load-com)
    (progn
      (setq
	fileR (open (findfile "hello.txt") "r")
	fileW (open (findfile "goodby.txt") "w")
	);setq
      (setq
      	buff (LM:ReadBinaryStream fileR 10000)
	);setq
      (while
        (while (vl-string-search "01011000 01011000 01011000" buff); XXX binary code
          (setq buff (vl-string-subst "01011001 01011001 01011001" "01011000 01011000 0101100" buff)); replace XXX binary with YYY code
        ); while
        (LM:WriteBinaryStream fileW buff)
      ); while
   );progn
  (close fileR)
  (close fileW)
);defun

Последний раз редактировалось Red Nova, 05.09.2016 в 07:07.
Red Nova вне форума  
 
Непрочитано 05.09.2016, 08:03
#21
trir


 
Регистрация: 18.12.2010
Сообщений: 3,459


Как бы есть NET API
trir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Dataextraction. Изменение ссылки на dwg файл.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение всех стилей текста чертежа, включая внешние ссылки на выбранный? Strannyk Программирование 9 19.07.2016 17:28
Как записать данные в файл, находящийся на удалённом компьютере? Makswell Программирование 10 09.07.2015 09:05
Одновременное изменение внешней ссылки в несколиких файлах. shartal AutoCAD 1 23.04.2015 15:51
Программное переименование внешней ссылки. Yura Agafonov Программирование 2 01.09.2014 09:57
файл в нанокаде и в автокаде, путаница E.D. AutoCAD 2 24.10.2008 09:56