|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Поиск русских букв в чертежах на английском языке.
Киев
Регистрация: 25.11.2010
Сообщений: 29
|
||
Просмотров: 22542
|
|
||||
Moderator
Конструктор (машиностроение) Регистрация: 23.10.2006
Россия
Сообщений: 23,267
![]() |
Подрывную деятельность ведут, наверное.
В винде запретить смену раскладки на русскую. |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Наверное можно сделать программную замену русских букв...
В текстах это сравнительно просто.
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Цитата:
Пусть тогда заказывают Александру Ривилису программу типа DWGConvert
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Ну почему же. Попробуй. И учти несколько нюансов. Кроме текстов в примитивах (про атрибуты, определения атрибутов, размерные тексты и т.д. я не упоминаю), нужно еще залезть во все блоки и ту же процедуру проделать в них. Плюс листы. Плюс проверить/изменить наименования всех именованных объектов (слои, блоки, типы линий, листы...) А еще все "\U+XXXX", "\M+YYYYY". В действительности в общем случае задача не такая уж тривиальная.
|
||||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Конечно лучше! А, черт с ним, терзайте.
Код на работу не проверялся вообще. Блоки не переименовывал. Листы тоже. Про таблицы просто забыл. Некогда ![]() --- Добавлено: навалилась срочная работа, поэтому код не доделан в части вывода списка ошибок. --- Добавлено 2: хоть бы откомментировали, что ли ![]()
__________________
(/= RegDate StartReadDate) Последний раз редактировалось Лиспер, 10.12.2010 в 16:32. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,182
|
Цитата:
![]() |
|||
![]() |
|
||||
Регистрация: 25.11.2010
Киев
Сообщений: 29
|
Цитата:
Файл rus2eng.lsp (10.8 Кб, 2 просмотров) не работает, пишет: "ошибка: слишком много аргументов" Последний раз редактировалось dpmoucpi, 10.12.2010 в 17:20. Причина: Добавление информации |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
gomer, а сам-то как думаешь? Замена символов в строке, что ж еще...
Не нравится - не пользуйся. Как-то желание продолжать решать твои проблемы с отношением "очередной вирус написали, за***ли уже!" пропало напрочь.
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Регистрация: 25.11.2010
Киев
Сообщений: 29
|
Цитата:
И я не говорил что ты написал вирус, у меня просто на работе гуляет такая вирусня и не знаю что с ней делать. Так что если можешь помоги пожалуйста. |
|||
![]() |
|
||||
Регистрация: 25.11.2010
Киев
Сообщений: 29
|
Так стояночка. Не хотел никого обидеть, и не надо меня не правильно понимать. Повторюсь есть на работе проблема с автокадовскими так называемыми "вирусами", подменяют функции автокада(проблема с сохранением файлов, внезапное закрытие чертежей и т.д.). В кодах не разбираюсь (надеюсь пока), так что отвечал как мог и как знал, надеясь помочь, направить решение проблемы в правильное русло, отсечь при этом ненужные вопросы.
Я не сразу понял что это код с присланного файла Лиспером, думал что это с чертежа образца который выслал я, сообщение идёт сразу за ним. Помогите плиз... Последний раз редактировалось dpmoucpi, 13.12.2010 в 11:15. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Так мальчидевочки только не подеритесь...
Я так понимаю, функция fun_replace должна выглядеть как-то так: Код:
dpmoucpi, Лиспер так спешил вам помочь, что наваял лажу, а вы его еще и ругаете за доброту душевную, гы |
|||
![]() |
|
||||
Цитата:
Я бы сделал по следующему алгоритму: В цикле перебрать все объекты базы данных чертежа. Если очередной объект - однострочный или многострочный текст, и при этом содержит в себе русские буквы (это легко проверить, получив числовое значение каждого символа в анализируемой строке и проверив, входит ли этот символ в диапазон числовых значений, определённых для русских символов), то выполняю его анализ, суть которого состоит в том, чтобы обратиться ко внешнему xml-файлу, в котором прописано соответствие букв в формате например таком (для примера даю три записи в теле файла): Соответствие по внешнему виду: Код:
Код:
Т.о., как видим - настройки замены не зашиты в коде, а отделены от него (имхо - это правильный подход). В результате работы программы, должен сформироваться отчёт, представленный в графическом виде (например, в виде таблички из двух столбцов). В этом отчёте, в первом столбце пользователю должны быть показаны слова, в которых найдены русские буквы. При этом русская буква должна быть выделена др. цветом (например красным). Во втором столбце должна быть показана альтернатива, предлагаемая на основе XML-файла, при этом, содержимое второго столбца, юзер должен иметь возможность редактировать - вбивать свой вариант замены, если его не устраивает предлагаемый по умолчанию. Кроме того, в каждой строке, перед первым столбцом должен стоять CheckBox - проверив запись и выбрав/задав нужный вариант замены, юзер ставит в чекбоксе галочку (мол проверено). Если юзер не поставил галочку - это слово не должно изменяться после того, как он нажмёт кнопку применения изменений. Когда будет проверено всё - пользователь жмёт кнопку "Выполнить замену". Вот и всё. Код, с помощью которого можно выбрать нужные объекты из базы чертежа я взял отсюда, дабы не искать там его вот он: Код:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 14.12.2010 в 08:52. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
В случае лиспа это не так - т.к. код не обязательно (и в большинстве случаев не комплируется), а где его "геморойней" редактировать в лиспе или xml еще вопрос. Или вы хотите еще "оболочку" по замене букв создать, тогда уж там надо и правила прописывать (с применением ваших любымых регов, учета где написанно и пр.) и программа разрастается до безобразия (и здесь пожалуй уже xml будет актуальным). А так как русские буквы могут встетится черт знает где, а не только в текстах (в описаниях блоков(динамических), внешних ссылках, доп. данных) - то выход здесь "правильный" только один - заплатить тому-же, например, Ривилису денег - т.к. "по быстрому" не съедешь, а если нет - то и вариант от VVA вполне приемлим.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Конечно, все это правильно, то что hwd предлагает, но реализовать это довольно трудоемко и "выходит за рамки бесплатного"
![]() Мне кажется, будет достаточно модифицировать программу таким образом, чтобы она не производила замены, а лишь выдавала отчет где именно обнаружены русские буквы, дабы пользователь уже самостоятельно исправлял. |
||||
![]() |
|
||||
Регистрация: 25.11.2010
Киев
Сообщений: 29
|
Цитата:
|
|||
![]() |
|
||||
Цитата:
Пользователя следует ограждать от вмешательства в исходный код (имхо). Если настройки замены вынесены во внешний файл, то таких файлов можно создать сколько угодно - в каждом своя логика замены. Код при этом переписывать не придётся - нужно будет только указать, какой xml-файл (из имеющихся) использовать в данном сеансе работы. Цитата:
Думаю тема закрыта, поскольку решение, предложенное VVA подошло пользователю.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Если заставлять юзера менять буквы текстовым редактором - то он что код, что xml может запороть - в обоих случаях программа функционировать перестает. Если делать "красиво" (с чего вы изначально и начали - гуишки с галочками и пр.), то надо и "редактор данных" писать - покажите мне хоть одну платную программу где внесение изменения настроек (штатно) подразумевает редактирование xml - я таких не знаю, а если вы ее и найдете - то это только показатель исключения (пробегитесь поиском по своему комьютеру по маске xml и еще не забываем что есть куча форматов "на основе" - много из них "вручную" правили). Знаю я что такое регексы - просто применяю я свои знания из расчета, что под данную задачу актуальней, а не гребу все под тот-же xml (это не Вам в укор - это просто разные "стили" программирования) - зачем я их упомянул - а при помощи них как раз и удобней всего сделать анализ - опечатка это или русское название (по соседним буквам в случае p c и пр.) . Есть еще много прекрасных решений с помощью которых "на ура" решаются задачи быстро и красиво, надо только уметь ими пользоватся, а не "замыкаться" на одной технологии.
p.s. разрастается она "до безобразия" не из-за гуишек и пр. - это стандартные элементы не отнимающие много времени - а из-за огромного количества мест которые нужно проверить - и далеко не всегда для корректной обработки достаточно "простой замены".
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 14.12.2010 в 12:00. |
|||
![]() |
|
||||||||
Цитата:
Цитата:
Какой к чёрту "редактор данных"??? Откройте букварь, почитайте про то, как работают с XML в dotnet. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Я изначально хотел ответить на все Ваши посты - но "одумавшись" понял, что это будет пустое сотрясение воздуха. Вы уважаемый не умеете слушать (читать) и недочитав делаете выводы (хотя-бы внимательно прочитали тот текст который цитируете - и посмотрели свои выводы - связи в них нет), что собеседник ни в чем не разберается и ничего не умеет, а повторять (разжевывать) одно и то же по несколько раз, человеку которому толку от этого не будет я не немерен.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Цитата:
![]()
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Начальник службы Заказчика Регистрация: 16.02.2008
РФ Пермь
Сообщений: 161
![]() |
Русские буквы, как и все символы национальных шрифтов, располагаются в кодовой странице после 127 символа. Достаточно проверить порядковый номер символа, чтоб все стало ясно. Порядковый номер символа, к примеру, в FoxPro возвращает функция chr(). Нечто подобное есть и в VBA. Что касается встроенной в автокад версии VBA, то просто не знаком с ней. Покопайтесь сами
Достаточно организовать простенький цикл посимвольной проверки каждого слова текстового блока с выдачей результата куда-нибудь во внешний файл. Тут все элементарно Последний раз редактировалось alakk, 14.12.2010 в 14:11. |
|||
![]() |
|
||||
Цитата:
1. В чем искать? В AutoCAD'е море различных примитивов, символьных таблиц и т.д. и т.п. в которых есть текстовые данные (впольть до имени)... 2. Что делать если код символа > 127? Удалять или заменять? Если заменять, то на что? И не возникнет ли повторения имен в символьных таблицах? 3. И с проверкой кода символа на > 127 не все просто. AutoCAD хранит информацию в UNICODE. Так что такая проверка не поможет. А есть еще строки вида "\U+XXXX" и "\M+YYYYY" Всё это я уже проходил в DWGCONVERT и смею уверить, что тут далеко не всё так просто. Кстати, в приведенном чертеже есть еще и текстовые стили, содержащие в названии русские буквы... |
||||
![]() |
|
||||
Начальник службы Заказчика Регистрация: 16.02.2008
РФ Пермь
Сообщений: 161
![]() |
Дружище. Если ты носишь гордое имя "Программист", то... не хочу тебя как-нибудь обидеть.
Я работаю в Архикаде и в ГДЛ, потому такие сложные VBA-материи мне не по плечу... ![]() |
|||
![]() |
|
||||
Ты бы свои пальцы-то с пола поубрал... А то неровен час - оттопчут... Командир млин нашёлся....
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
|
||||
![]() |
|
||||
Регистрация: 25.11.2010
Киев
Сообщений: 29
|
Цитата:
Нормально заменяет, но не все символы почему то правильно, например такие символы как "," "є" и некоторые другие заменяет на "?". Это можно как то исправить? Заранее спасибо. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Что за символ такой?
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.11.2010
Киев
Сообщений: 29
|
Да всё так но и символ "°", и знак деления, степень всё заменяется на "?".
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Обнаружился один интересный глюк: Если в тексте есть UNICOD символы (например "\\U+00F7") то entget возвращает правильный результат, а Vla-get-Textstring - вопрос. Пришлось брать значение через entget
В Автокаде Цитата:
Цитата:
2011-02-07 - Исправлена ошибка из поста #81 2011-03-17 Добавлен purge и audit Код:
Последний раз редактировалось VVA, 17.03.2011 в 13:05. Причина: Добавил purge |
|||
![]() |
|
||||
Это для однострочного текста или для многострочного тоже? Если и для многострочного, то тогда придется не только группу 1 читать, но и 3. Причем группа 3 может повторятся.
|
||||
![]() |
|
||||
Начальник службы Заказчика Регистрация: 16.02.2008
РФ Пермь
Сообщений: 161
![]() |
Цитата:
![]() А вот как организовать ПОИСК таких символов в проекте автокада? Тут уже ваше дело, господа спецы по автокаду. Мне кажется, что представленный постом выше (54) алгоритм немного нелогичен, т.к. перебирает все подряд и потому работает долго. Потому и предложил некоторое подобие метода Симпсона - последовательных приближений. Тут используется некоторый набор признаков, которым должен удовлетворять некий символ. Если кто не понял и о5 будет топтать пальцы - в школу, в 11 класс. А самый простой метод - передавать проект в виде рисунка. Тут забугорная буквоедка ничего не поймет. Формат pdf. В этом случае и программить ничего не надо. Как сделать... Подсказать? ![]() Последний раз редактировалось alakk, 15.12.2010 в 06:29. |
|||
![]() |
|
||||
Сомневаюсь, что этот вариант пройдет - если бы он прошел, то и такого вопроса на форуме не было. Все сейчас умные и стараются не отдавать dwg-файлы или хоть как-то их защитить. На форуме уже не один десяток тем этому посвящен.
Цитата:
Цитата:
VVA, есть идея, но нет времени на ее реализацию. 1. Раз уж пришлось завязаться на (entget), то нужно пройтись по всем кодам групп, и для тех, у кого строковое представление выполнять транслитерацию. 2. Используя комбинацию (handent) и (entget) пройтись по всем объектам (не только примитивам, но и таблицам и т.д.) чертежа. Начать нужно с метки таблицы блоков и закончить значением системной переменной HANDSEED. По этому принципу у меня выполняется проход по всем объектам в REMOVEALLPROXY, и работает достаточно быстро. P.S.: Насчет HANDSEED я погорячился - в VisualLisp его значение не получить. Бегло взглянув на документацию по VisualLisp я не нашел способа получить метку последнего объекта в чертеже его средствами. Нужно что-то более хитрое. Последний раз редактировалось Александр Ривилис, 15.12.2010 в 09:46. Причина: Уточнение по поводу HANDSEED |
||||
![]() |
|
||||
Начальник службы Заказчика Регистрация: 16.02.2008
РФ Пермь
Сообщений: 161
![]() |
Цитата:
Что же касается юникода, то это вопрос не программирования, а организации. Достаточно вполне передать заказчику шрифты. Это его никак не обидит, а исполнителя лишит головной боли. Последний раз редактировалось alakk, 15.12.2010 в 11:03. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
dpmoucpi, Мой косяк. Обновил #59
Александр Ривилис, Идея хорошая. При наличии времени можно будет попробовать
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Проблема в том, что я посоветовал VVA проверять все строковые данные примитива - среди них попались и имена слоев (это еще ничего) , но и имена текстовых стилей - а вот это плохо. А они у тебя тоже русскими буквами...
|
||||
![]() |
|
||||
Регистрация: 25.11.2010
Киев
Сообщений: 29
|
Цитата:
Александр Ривилис: не смотря на это, всё работало норм, а теперь как отрубило, блин.. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
У меня сейчас времени разбираться нет. Сделал, как посоветовали в #78
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
dpmoucpi, Из всего чертежа оставь 1 текст, у которого меняет шрифт и 1 текст, у которого меняет знак и выложи этот dwg.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Уточни, какая утилита и какой код (номер поста) работает нормально?
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.11.2010
Киев
Сообщений: 29
|
Цитата:
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ищу СНиП на Английском языке | aibek | Поиск литературы, чертежей, моделей и прочих материалов | 2 | 09.05.2013 04:51 |
Журналы на английском языке по проектированию зданий и металлических конструкций | nex2hex | Поиск литературы, чертежей, моделей и прочих материалов | 0 | 22.09.2010 11:43 |
Ищу литературу по деревянным конструкциям на английском языке | Foksolic | Поиск литературы, чертежей, моделей и прочих материалов | 9 | 25.02.2009 17:31 |
Ищу статью на английском языке 10-12 тысяч слов. | Sherry | Поиск литературы, чертежей, моделей и прочих материалов | 2 | 10.09.2008 10:41 |
Надписи на чертежах на Украинском языке | sash1222 | AutoCAD | 1 | 27.11.2007 12:41 |