Запись/чтение данных XData под кодом DxfCode.ExtendedDataAsciiString.

Автор Тема: Запись/чтение данных XData под кодом DxfCode.ExtendedDataAsciiString.  (Прочитано 6757 раз)

0 Пользователей и 4 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Здравствуйте!
Возможно, что у меня под вечер немного ум за разум заходит, но мне видятся некоторые возможные проблемы с записью строки в XData под кодом DxfCode.ExtendedDataAsciiString. Не зря же там уточнение, что именно ASCII-строка? Может же получиться так, что какая-то строка будет искажена из-за этого при чтении-записи (если есть какие-то спецсимволы)? Возможно, есть какой-то справочный материал по этой теме?
« Последнее редактирование: 15-12-2017, 19:42:06 от Дмитрий Загорулькин »

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
По опыту пишется все подряд без проблем: кириллица, символы форматирования и всякие значки...

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Это ободряет! :)
Проверил на запись-чтение такую строку: !@#$%^&*()_+№";:?-=[]{}'|\/.,<>`~%‰°±•Проблем не возникло. Думаю, такого набора спецсимволов мне хватит.

Думал: может имеет смысл заранее предусмотреть конвертацию строки в поток байтов и записывать под кодом DxfCode.ExtendedDataBinaryChunk? Но, вроде как, и DxfCode.ExtendedDataAsciiString нормально справляется.

Отмечено как Решение Дмитрий Загорулькин 15-12-2017, 21:08:16

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не зря же там уточнение, что именно ASCII-строка?
Это может быть любая Unicode-строка. Во всяком случае явных ограничений нет. В документации указано длиной до 255 байт. Вот тут интересный момент: байт или символов (в одном символе два байта)? Нужно проверять. Думаю что символов. Хранятся они точно как Unicode-строки, как и любые строки в AutoCAD начиная с 2007-ой версии.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Вот тут интересный момент: байт или символов (в одном символе два байта)? Нужно проверять. Думаю что символов.
Хм, а как можно проверить? Есть идеи по алгоритму? Я бы проверил, но не представляю как :(

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Хм, а как можно проверить? Есть идеи по алгоритму? Я бы проверил, но не представляю как :(
Загони в строку 255 символов "\u2211" (это символ ∑) и запиши её в расширенные данные в DxfCode.ExtendedDataAsciiString. Ну и убедись, что их 255, а не обрезало наполовину.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Загнал тысячу символов Ё. Получил тысячу символов Ё. Слухи про ограничение длины сильно преувеличены ;)
Есть подозрение что Автокад вообще игнорит это поле с типом - используйте для себя как хотите, а я просто храню массив байт.

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Загони в строку 255 символов "\u2211" (это символ ∑) и запиши её в расширенные данные в DxfCode.ExtendedDataAsciiString. Ну и убедись, что их 255, а не обрезало наполовину.
Загнал, проверил, убедился - все 255 на месте :)
Загнал тысячу символов Ё. Получил тысячу символов Ё. Слухи про ограничение длины сильно преувеличены
Есть подозрение что Автокад вообще игнорит это поле с типом - используйте для себя как хотите, а я просто храню массив байт.
А если выполнить Audit с исправлением ошибок? Вот статья на эту тему: http://spiderinnet1.typepad.com/blog/2012/11/autocad-net-xdata-xdata-string-length-limit-physical-and-theoretical.html

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Загнал тысячу символов Ё. Получил тысячу символов Ё. Слухи про ограничение длины сильно преувеличены ;)
Есть подозрение что Автокад вообще игнорит это поле с типом - используйте для себя как хотите, а я просто храню массив байт.
dwg/dxf-файл сохранял и потом открывал? Ведь обрезка может быть на этапе сохранения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
А если выполнить Audit с исправлением ошибок?
Черт! Аудит подрезал строку до 256 символов! Просто сохранение dwg проверял сразу - хранится все нормально сколько угодно.