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

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

Поиск русских букв в чертежах на английском языке.

Ответ
Поиск в этой теме
Непрочитано 10.12.2010, 11:54
Поиск русских букв в чертежах на английском языке.
dpmoucpi
 
Киев
Регистрация: 25.11.2010
Сообщений: 29

Добрый день.
Появилась такая проблема:
Чертежи необходимо сдавать на английском языке. У заказчика установлена система которая проверяет чертежи (вплоть до толщины линии) и если на чертеже есть буквы на русском языке она их не принимает.
То-ли в силу своей не внимательности или по другой причине но проектировщики иногда вводят русские буквы вместо английских.
Кто может подсказать как бы так находить русские буквы на чертежах?
Просмотров: 22515
 
Непрочитано 10.12.2010, 20:21
#21
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


А можно поклянчить образец? Я попробую найти время на поковырять код.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 11.12.2010, 13:21
#22
dpmoucpi


 
Регистрация: 25.11.2010
Киев
Сообщений: 29


Цитата:
Сообщение от Лиспер Посмотреть сообщение
А можно поклянчить образец? Я попробую найти время на поковырять код.
Образец вот такой.
Вложения
Тип файла: dwg
DWG 2007
obrazec.dwg (295.2 Кб, 1232 просмотров)
dpmoucpi вне форума  
 
Непрочитано 11.12.2010, 14:58
#23
gomer

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


Код:
[Выделить все]
  (defun fun_replace (str)
    (foreach item replace
      (setq str (_lsp-conv-list-to-string
                  (_lsp-conv-string-to-list (car item))
                  (cdr item)
                  ) ;_ end of _lsp-conv-list-to-string
            ) ;_ end of setq
      ) ;_ end of foreach
    ) ;_ end of defun
Эт че такое?
gomer вне форума  
 
Автор темы   Непрочитано 11.12.2010, 15:58
#24
dpmoucpi


 
Регистрация: 25.11.2010
Киев
Сообщений: 29


Цитата:
Сообщение от gomer Посмотреть сообщение
Код:
[Выделить все]
  (defun fun_replace (str)
    (foreach item replace
      (setq str (_lsp-conv-list-to-string
                  (_lsp-conv-string-to-list (car item))
                  (cdr item)
                  ) ;_ end of _lsp-conv-list-to-string
            ) ;_ end of setq
      ) ;_ end of foreach
    ) ;_ end of defun
Эт че такое?
Не знаю, а на что похоже?
Может это вирусня автокадовская, за***ла уже!!
dpmoucpi вне форума  
 
Непрочитано 11.12.2010, 18:03
#25
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


gomer, а сам-то как думаешь? Замена символов в строке, что ж еще...
Цитата:
Сообщение от dpmoucpi Посмотреть сообщение
Может это вирусня автокадовская, за***ла уже!
Не нравится - не пользуйся. Как-то желание продолжать решать твои проблемы с отношением "очередной вирус написали, за***ли уже!" пропало напрочь.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 11.12.2010, 18:56
#26
gomer

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


Цитата:
Сообщение от dpmoucpi Посмотреть сообщение
Не знаю, а на что похоже?
Это похоже на код, вылетающий по ошибке...
gomer вне форума  
 
Непрочитано 11.12.2010, 19:01
#27
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Возможно. Разбираться не буду.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 13.12.2010, 10:31
#28
dpmoucpi


 
Регистрация: 25.11.2010
Киев
Сообщений: 29


Цитата:
Сообщение от Лиспер Посмотреть сообщение
gomer, а сам-то как думаешь? Замена символов в строке, что ж еще...

Не нравится - не пользуйся. Как-то желание продолжать решать твои проблемы с отношением "очередной вирус написали, за***ли уже!" пропало напрочь.
Так а чё ты горячишься, если б я разбирался, я бы наверное не спрашивал.
И я не говорил что ты написал вирус, у меня просто на работе гуляет такая вирусня и не знаю что с ней делать. Так что если можешь помоги пожалуйста.
dpmoucpi вне форума  
 
Непрочитано 13.12.2010, 10:52
#29
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


dpmoucpi Ты бы сначала думал, перед тем как писать. Иначе всех помощников разгонишь.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 13.12.2010, 11:09
#30
dpmoucpi


 
Регистрация: 25.11.2010
Киев
Сообщений: 29


Так стояночка. Не хотел никого обидеть, и не надо меня не правильно понимать. Повторюсь есть на работе проблема с автокадовскими так называемыми "вирусами", подменяют функции автокада(проблема с сохранением файлов, внезапное закрытие чертежей и т.д.). В кодах не разбираюсь (надеюсь пока), так что отвечал как мог и как знал, надеясь помочь, направить решение проблемы в правильное русло, отсечь при этом ненужные вопросы.
Я не сразу понял что это код с присланного файла Лиспером, думал что это с чертежа образца который выслал я, сообщение идёт сразу за ним.
Помогите плиз...

Последний раз редактировалось dpmoucpi, 13.12.2010 в 11:15.
dpmoucpi вне форума  
 
Непрочитано 13.12.2010, 18:58
#31
gomer

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


Так мальчидевочки только не подеритесь...
Я так понимаю, функция fun_replace должна выглядеть как-то так:
Код:
[Выделить все]
(defun fun_replace (str / asc)
  (vl-list->string
    (mapcar
      '(lambda (x)
	 (if (setq asc (assoc x replace))
	   (cdr asc)
	   x
	 )
       )
      (vl-string->list str)
    )
  )
)
Классический случай, когда жаргонность, вычитанная из некой книжицы, абсолютно не помогает
dpmoucpi, Лиспер так спешил вам помочь, что наваял лажу, а вы его еще и ругаете за доброту душевную, гы
gomer вне форума  
 
Непрочитано 13.12.2010, 19:56
1 | #32
VVA

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


Мой вариант (тестировал на файле, опубликованном в #22)
Измененный вариант см пост #59
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 15.12.2010 в 19:30.
VVA вне форума  
 
Непрочитано 13.12.2010, 20:07
#33
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


В порядке странной идеи:
Сохранить в dxf и напустить хитрых регулярных выражений будет не проще чем писать лисп ищущий во всех закутках?
zamtmn вне форума  
 
Непрочитано 13.12.2010, 23:57
#34
gomer

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


Ну, очень хитрых получится!
gomer вне форума  
 
Непрочитано 14.12.2010, 08:34
#35
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от VVA Посмотреть сообщение
...
(setq translit
'(("А" "A")("Б" "B")("В" "V")("Г" "G")("Д" "D")("Е" "E")("Ё" "YO")("Ж" "ZH")("З" "Z")
("И" "I")("Й" "J")("К" "K")("Л" "L")("М" "M")("Н" "N")("О" "O")("П" "P")("Р" "R")("С" "S")
("Т" "T")("У" "U")("Ф" "F")("Х" "X")("Ц" "C")("Ч" "CH")("Ш" "SH")("Щ" "SHH")("Ъ" "#")("Ы" "Y")
("Ь" "'")("Э" "JE")("Ю" "JU")("Я" "JA")("а" "a")("б" "b")("в" "v")("г" "g")("д" "d")("е" "e")
("ё" "yo")("ж" "zh")("з" "z")("и" "i")("й" "j")("к" "k")("л" "l")("м" "m")("н" "n")("о" "o")("п" "p")
("р" "r")("с" "s")("т" "t")("у" "u")("ф" "f")("х" "x")("ц" "c")("ч" "ch")("ш" "sh")("щ" "shh")("ъ" "#")("ы" "y")
("ь" "'")("э" "je")("ю" "ju")("я" "ja")))
...
Мне кажется, что транслит тут не подойдёт. Поскольку если в чертеже имеется буква "Ю" (к примеру), то не факт, что на самом деле должно быть "JU".
Я бы сделал по следующему алгоритму:
В цикле перебрать все объекты базы данных чертежа. Если очередной объект - однострочный или многострочный текст, и при этом содержит в себе русские буквы (это легко проверить, получив числовое значение каждого символа в анализируемой строке и проверив, входит ли этот символ в диапазон числовых значений, определённых для русских символов), то выполняю его анализ, суть которого состоит в том, чтобы обратиться ко внешнему xml-файлу, в котором прописано соответствие букв в формате например таком (для примера даю три записи в теле файла):
Соответствие по внешнему виду:
Код:
[Выделить все]
<Chars>
<Char Ru="А" Enu="A"/>
<Char Ru="О" Enu="O"/>
<Char Ru="P" Enu="Р"/>
<\Chars>
а может файл должен быть таким (соответствие на клавише):
Код:
[Выделить все]
<Chars>
<Char Ru="А" Enu="F"/>
<Char Ru="О" Enu="J"/>
<Char Ru="P" Enu="H"/>
<\Chars>
Тут нужно смотреть, какого рода "очепятки", чтобы понять, какой логикой руководствоваться в процессе формирования xml-файла.

Т.о., как видим - настройки замены не зашиты в коде, а отделены от него (имхо - это правильный подход).

В результате работы программы, должен сформироваться отчёт, представленный в графическом виде (например, в виде таблички из двух столбцов).

В этом отчёте, в первом столбце пользователю должны быть показаны слова, в которых найдены русские буквы. При этом русская буква должна быть выделена др. цветом (например красным). Во втором столбце должна быть показана альтернатива, предлагаемая на основе XML-файла, при этом, содержимое второго столбца, юзер должен иметь возможность редактировать - вбивать свой вариант замены, если его не устраивает предлагаемый по умолчанию.

Кроме того, в каждой строке, перед первым столбцом должен стоять CheckBox - проверив запись и выбрав/задав нужный вариант замены, юзер ставит в чекбоксе галочку (мол проверено). Если юзер не поставил галочку - это слово не должно изменяться после того, как он нажмёт кнопку применения изменений.

Когда будет проверено всё - пользователь жмёт кнопку "Выполнить замену". Вот и всё.
Код, с помощью которого можно выбрать нужные объекты из базы чертежа я взял отсюда, дабы не искать там его вот он:
Код:
[Выделить все]
 142:          /// <summary>
 143:          /// Получить идентификаторы тех примитивов базы данных чертежа, которые удовлетворяют условию, переданному в метод в качестве параметра.
 144:          /// </summary>
 145:          /// <param name="predicate">Лямбда-выражение, которое будет применяться к каждому примитиву базы данных чертежа и возвращать
 146:          /// логическое значение. Если возвращается True - идентификатор объекта будет добавлен в состав результирующей выборки идентификаторов.</param>
 147:          /// <returns>Возвращается массив ObjectId[]</returns>
 148:          public ObjectId[] GetPrimitives(Func<ObjectId, bool> predicate)
 149:          {
 150:              List<ObjectId> primitives = new List<ObjectId>();
 151:   
 152:              using (Transaction t = dwg.TransactionManager.StartTransaction()) // 'dwg' is Document
 153:              {
 154:                  for (long i = db.BlockTableId.Handle.Value; i < db.Handseed.Value; i++)// 'db' is Database
 155:                  {
 156:                      ObjectId id = ObjectId.Null;
 157:                      try
 158:                      {
 159:                          id = db.GetObjectId(false, new Handle(i), 0);
 160:                      }
 161:                      catch (System.Exception)
 162:                      { continue; }
 163:                      if (!id.IsErased && predicate(id)) primitives.Add(id);
 164:                  }
 165:              }
 166:              return primitives.ToArray(); 
 167:          }
Интерфейс, указанный мною выше, сделать не сложно (имхо).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 14.12.2010 в 08:52.
hwd вне форума  
 
Непрочитано 14.12.2010, 10:26
#36
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от hwd Посмотреть сообщение
Т.о., как видим - настройки замены не зашиты в коде, а отделены от него (имхо - это правильный подход).
В случае лиспа это не так - т.к. код не обязательно (и в большинстве случаев не комплируется), а где его "геморойней" редактировать в лиспе или xml еще вопрос. Или вы хотите еще "оболочку" по замене букв создать, тогда уж там надо и правила прописывать (с применением ваших любымых регов, учета где написанно и пр.) и программа разрастается до безобразия (и здесь пожалуй уже xml будет актуальным). А так как русские буквы могут встетится черт знает где, а не только в текстах (в описаниях блоков(динамических), внешних ссылках, доп. данных) - то выход здесь "правильный" только один - заплатить тому-же, например, Ривилису денег - т.к. "по быстрому" не съедешь, а если нет - то и вариант от VVA вполне приемлим.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 14.12.2010, 10:34
#37
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Конечно, все это правильно, то что hwd предлагает, но реализовать это довольно трудоемко и "выходит за рамки бесплатного"
Мне кажется, будет достаточно модифицировать программу таким образом, чтобы она не производила замены, а лишь выдавала отчет где именно обнаружены русские буквы, дабы пользователь уже самостоятельно исправлял.
Do$ вне форума  
 
Автор темы   Непрочитано 14.12.2010, 10:39
#38
dpmoucpi


 
Регистрация: 25.11.2010
Киев
Сообщений: 29


Цитата:
Сообщение от VVA Посмотреть сообщение
Мой вариант (тестировал на файле, опубликованном в #22)
Код:
[Выделить все]
(defun C:R2E (  / *error* Doc)
  ;;;Rus To Eng
  (vl-load-com)  
  (defun *error* (msg)(princ msg)
   (bg:layer-status-restore)
   (vla-endundomark Doc)(princ)
  )
(setq Doc (vla-get-activedocument (vlax-get-acad-object)))
(bg:layer-status-save)(vla-startundomark Doc)
(Translate-All-String-Objects Doc)
(bg:layer-status-restore)(vla-endundomark Doc)
(princ)
)

(defun Translate-All-String-Objects (Doc / txtstr tmp txt count)
  (vlax-for Blk	(vla-get-Blocks Doc)
    (if (= (vla-get-IsXref Blk) :vlax-false)
      (progn
	(setq count 0 txt (strcat "Changed " (vla-get-name Blk)))
	(grtext -1 txt)
      (vlax-for	Obj Blk
	(setq count (1+ count))
	(if (zerop(rem count 10))(grtext -1 (strcat txt " : " (itoa count))))
	(if (and (vlax-write-enabled-p Obj)
		 (vlax-property-available-p Obj 'TextString)
	    ) ;_ end of and
	  (progn
	    (setq txtstr
		   (if (vlax-method-applicable-p Obj 'FieldCode)
		       (vla-FieldCode Obj)
		       (vlax-get-property Obj 'TextString))
                  txtstr (trans-from-rus-to-translit txtstr)
		  )
	    (vla-put-Textstring Obj txtstr)
	    )
	) ;_ end of if
      ) ;_ end of vlax-for
      )
    ) ;_ end of if
  ) ;_ end of vlax-for
 (vl-cmdf "_regenall")
)
(defun trans-from-rus-to-translit   ( str / translit)(vl-load-com)  
   ;;;  http://www.caduser.ru/cgi-bin/f1/board.cgi?t=28488Sx
   ;;; http://forum.dwg.ru/showthread.php?t=13063
   ;;;  Соответствие символов взято с translit.ru
   ;;;  по мотивам http://www.caduser.ru/cgi-bin/f1/board.cgi?t=28488Sx
   ;;;  name - исходная строка 
   ;;;  возвращается преобразованная 
(setq translit 
'(("А" "A")("Б" "B")("В" "V")("Г" "G")("Д" "D")("Е" "E")("Ё" "YO")("Ж" "ZH")("З" "Z") 
  ("И" "I")("Й" "J")("К" "K")("Л" "L")("М" "M")("Н" "N")("О" "O")("П" "P")("Р" "R")("С" "S") 
  ("Т" "T")("У" "U")("Ф" "F")("Х" "X")("Ц" "C")("Ч" "CH")("Ш" "SH")("Щ" "SHH")("Ъ" "#")("Ы" "Y") 
  ("Ь" "'")("Э" "JE")("Ю" "JU")("Я" "JA")("а" "a")("б" "b")("в" "v")("г" "g")("д" "d")("е" "e") 
  ("ё" "yo")("ж" "zh")("з" "z")("и" "i")("й" "j")("к" "k")("л" "l")("м" "m")("н" "n")("о" "o")("п" "p") 
  ("р" "r")("с" "s")("т" "t")("у" "u")("ф" "f")("х" "x")("ц" "c")("ч" "ch")("ш" "sh")("щ" "shh")("ъ" "#")("ы" "y") 
  ("ь" "'")("э" "je")("ю" "ju")("я" "ja"))) 
    
   (apply 'strcat 
        (mapcar '(lambda (x / sym) 
              (if (setq sym (assoc x translit)) 
                (cadr sym) 
                x 
              ) ;_ конец if 
            ) ;_ конец lambda 
           (mapcar 'chr (vl-string->list str)) 
        ) ;_ конец mapcar 
      ) ;_ конец apply
)
(defun bg:layer-status-restore ()
    (foreach item *PD_LAYER_LST*
      (if (not (vlax-erased-p (car item)))
        (vl-catch-all-apply
          '(lambda ()
             (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
             (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
             ) ;_ end of lambda
          ) ;_ end of vl-catch-all-apply
        ) ;_ end of if
      ) ;_ end of foreach
    (setq *PD_LAYER_LST* nil)
    ) ;_ end of defun

  (defun bg:layer-status-save ()
    (setq *PD_LAYER_LST* nil)
    (vlax-for item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
      (setq *PD_LAYER_LST* (cons (list item
                                  (cons "freeze" (vla-get-freeze item))
                                  (cons "lock" (vla-get-lock item))
                                  ) ;_ end of cons
                            *PD_LAYER_LST*
                            ) ;_ end of cons
            ) ;_ end of setq
      (vla-put-lock item :vlax-false)
      (if (= (vla-get-freeze item) :vlax-true)
      (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false))))
      ) ;_ end of vlax-for
    ) ;_ end of defun
Спасибо огромное, очень помогло!!!!!
dpmoucpi вне форума  
 
Непрочитано 14.12.2010, 11:23
#39
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
В случае лиспа это не так - т.к. код не обязательно (и в большинстве случаев не комплируется), а где его "геморойней" редактировать в лиспе или xml еще вопрос.
ИМХО удобней - в XML: одно дело, если пользователь откроет файл и увидит то, что я показал выше (т.е. только данные, синтаксис которых не составит большого труда понять), а другое дело - когда ему нужно листать LISP-листинг кода, дабы самому заменять его текст. А если он ещё и ошибётся где-то (случайно внесёт изменение в исходники) - код вообще работать перестанет.
Пользователя следует ограждать от вмешательства в исходный код (имхо).

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

Цитата:
Или вы хотите еще "оболочку" по замене букв создать, тогда уж там надо и правила прописывать (с применением ваших любымых регов, учета где написанно и пр.) и программа разрастается до безобразия (и здесь пожалуй уже xml будет актуальным).
Какая ещё "оболочка по замене букв"(с)? Вы ещё предложИте операционную систему специально разработать под это дело... Регексы вы с какой целью упомянули? Если бы вы знали, что это такое, то данной фразы не было бы. Похоже что в вашем исполнении программа действительно "разрастётся до безобразия"(с).


Думаю тема закрыта, поскольку решение, предложенное VVA подошло пользователю.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 14.12.2010, 11:47
#40
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Если заставлять юзера менять буквы текстовым редактором - то он что код, что xml может запороть - в обоих случаях программа функционировать перестает. Если делать "красиво" (с чего вы изначально и начали - гуишки с галочками и пр.), то надо и "редактор данных" писать - покажите мне хоть одну платную программу где внесение изменения настроек (штатно) подразумевает редактирование xml - я таких не знаю, а если вы ее и найдете - то это только показатель исключения (пробегитесь поиском по своему комьютеру по маске xml и еще не забываем что есть куча форматов "на основе" - много из них "вручную" правили). Знаю я что такое регексы - просто применяю я свои знания из расчета, что под данную задачу актуальней, а не гребу все под тот-же xml (это не Вам в укор - это просто разные "стили" программирования) - зачем я их упомянул - а при помощи них как раз и удобней всего сделать анализ - опечатка это или русское название (по соседним буквам в случае p c и пр.) . Есть еще много прекрасных решений с помощью которых "на ура" решаются задачи быстро и красиво, надо только уметь ими пользоватся, а не "замыкаться" на одной технологии.
p.s. разрастается она "до безобразия" не из-за гуишек и пр. - это стандартные элементы не отнимающие много времени - а из-за огромного количества мест которые нужно проверить - и далеко не всегда для корректной обработки достаточно "простой замены".
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 14.12.2010 в 12:00.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Поиск русских букв в чертежах на английском языке.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу СНиП на Английском языке 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