DXF. Программа извлечения текстов. Сортировка. Уникальные.

Автор Vitalij Lysanov, 11.10.17, 23:02:07

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Vitalij Lysanov

Программа из формата DXF извлекает тексты и сортирует.
Цель -  получить аналог спецификации для уменьшения ошибок.
При сортировке, и особенно в уникальных текстах, ошибки видно сразу.

Работаем по данным темы:
http://forum.ascon.ru/index.php/topic,30772.msg243308.html#msg243308

Недостатки:

-- Связнные многострочные тексты формат DXF разбивает на отдельные тексты, разрушая текст на составные строки.
    Итератор прямо из фрагмента будет работать лучше.

--  В записи уникальных желательно добавить количество

-- Выход из таблиц на графику желателен. Координаты для выхода есть.

-- Отсутствует сравнение  с базой данных возможных наименований (ограничитель). Это как в спецификациях, для идентичности наименований, новое наименование сначала заносят в базу, а затем по всем спецификациям выбираем из базы данных. Существующие наименования просто выбираем из перечня базы данных. Порядковый номер в наименовании тоже желательно согласовывать с именами,  имеющимися на чертеже. (" Тр1","Тр2") .   

Пример сортировки:
['КТП-630/6/0,4' '3735.236014450013' '44.98155006805667']
['КТП-630/6/0,4' '3737.932369316041' '443.0127913436557']
['КТП-630/6/0,4' '3741.295520695448' '443.11271339219']
['КТП-630/6/0,4' '3741.295520695448' '445.7162647689006']
['КТП-9-400/6/0,4' '3742.562578285158' '445.7162647689006']
['КТП-СН' '3742.953512065873' '446.2316400082907']

Пример уникальныых:
ТМГ
ТМГФ-1000
ТМГФ-1000/6/0.4
ТМГФ-1600/6/0.4
ТМГФ-250/6/0.4    ("250" похоже на ошибку.  Также есть лишние пробелы в начале текста, Для программы это ошибка.   )
ТМГФ-2500/6/0.4
ТМГФ-630
ТОЛ-10
ТОЛ-СЭЩ-10

В приложении копии вывода в Excel.

Программа
# coding: utf8
import numpy as np
import re
text = open('D:\\11.dxf','r',encoding='utf-8').read()

ob= text.count("AcDbMText")   # Количество текстов
print("ob = ",ob)

sdv=0
n=0
ms=[] # Выходной массив
mm=[] # Выходной массив

for n in range(ob):                  # Цикл по количеству текстов
    n=n+1
    c = text[sdv:].find("AcDbMText") # Ищем признак текста.
    tmp=text[(sdv+c):(sdv+c+211)]    # Записываем в переменную с запасом по количеству символов
    kor=re.split("\n",tmp)                # Разбиваем по строкам
    tmp2=re.split(";",kor[18])            # 18 Это номер строки с текстом
                                     
    m=[]
    m.append(float(kor[2]))      # Вторая и четвертая строки это координаты текста
    m.append(float(kor[4]))
    m.append(tmp2[-1])                    # Справа до точки с запятой выбираем текст.

    mt=[]
    mt.append(tmp2[-1])
    mt.append(float(kor[2]))
    mt.append(float(kor[4]))

    mm.append(m)
    ms.append(mt)

    sdv=sdv+c+1

nms=np.array(ms)                    # Запись в массив NumPy
nmso1=np.sort(nms, axis=0)          # Сортировка

for n in nmso1:
    print (n)

un=np.unique(nmso1)                 # Уникальные

for n in un:
   print (n)


+ Благодарностей: 1