Иван Ведерников
Посетитель
Всего сообщений: 27
Дата регистрации: 06.11.2018
|
Создано:
08.12.2021 07:48:08
|
Добрый день!
Подскажите как записать значения в таблицы Rastr используя python?
Код |
---|
x = rastr.tables("node").cols.Item("ny").Z(0) # работает
rastr.tables("node").cols.Item("ny").Z(0) = 5 # не работает
# SyntaxError: cannot assign to function call here.
rastr.tables("node").cols.Item("ny").Z[0] = 5 # не работает
# TypeError: 'method' object does not support item assignment
|
|
|
|
Станислав Богданов
Модератор
Всего сообщений: 61
Дата регистрации: 11.10.2012
|
Создано:
08.12.2021 10:10:23
|
Примерно так:
Код |
---|
column = table.Cols(column)
column.SetZ(row_id, value) # вместо column.Z(row_id) = value
|
|
|
|
Иван Ведерников
Посетитель
Всего сообщений: 27
Дата регистрации: 06.11.2018
|
Создано:
08.12.2021 10:56:52
|
Благодарю, работает!
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
09.12.2021 09:49:20
|
А как подключить объекты растра в python?
|
|
|
Иван Ведерников
Посетитель
Всего сообщений: 27
Дата регистрации: 06.11.2018
|
Создано:
09.12.2021 10:20:27
|
установить модуль pywin32
Код |
---|
import win32com.client
rastr = win32com.client.Dispatch("Astra.Rastr")
|
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1042
Дата регистрации: 23.04.2007
|
Создано:
09.12.2021 15:42:17
|
Я прям вижу флотилию Парусов на горизонте
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
10.12.2021 23:28:00
|
Спасибо!
Есть у него какие-то очевидные преимущества относительно обычного vbs?
|
|
|
Иван Ведерников
Посетитель
Всего сообщений: 27
Дата регистрации: 06.11.2018
|
Создано:
13.12.2021 10:40:59
|
Если простая программка или она должна работать в загруженном файле растр, то vbs, если программа посложнее то писать, отлаживать , делать графический интерфейс лучше в python. Там очень много возможностей
|
|
|
Nick_A
Посетитель
Всего сообщений: 45
Дата регистрации: 30.09.2021
|
Создано:
21.12.2022 11:01:54
|
Добрый день. А может кто-то показать какой-то пример макро на python. Чтобы начать было проще. Как происходит загрузка файлов, таблиц в них, сохранение, добавление строк, изменение параметров и прочее. Заранее благодарю
|
|
|
Александр Александров
Администратор
Всего сообщений: 657
Дата регистрации: 31.05.2008
|
Создано:
21.12.2022 13:35:04
|
|
Здравствуйте!
макрос загружает файлы из директорий и считает оптимизацию
Код |
---|
import os
import win32com.client as c32
def GetPathToScanDir():
return r'D:VmsSHARAcrossesODU_SB2022_11_18_archmup'
def GetPathToScanDir7z():
return r'D:VmsSHARAcrossesODU_SB2022_11_18_archm'
def GetCentr():
return 45000
def GetCentrs():
return (15000,)
def GetScnaFName():
return 'roc_debug_before_OC'
def Get_RG_REPL():
return 1
def GetMaxOtv():
return 18
def Get_max_otv(tables):
table_node = tables('node')
node_col_sta = table_node.Cols('sta')
node_col_ny = table_node.Cols('ny')
node_col_otv = table_node.Cols('otv')
table_node.SetSel('sta=0')
max_otv = 0
max_otv_node_num = -1000
curent_row_node = table_node.FindNextSel(-1)
while curent_row_node != -1:
sta = node_col_sta.Z(curent_row_node)
ny = node_col_ny.Z(curent_row_node)
otv = node_col_otv.Z(curent_row_node)
if abs(max_otv) < abs(otv):
max_otv = otv
max_otv_node_num = ny
#print('sta= '+str(sta)+ ' dv='+str(otv))
curent_row_node = table_node.FindNextSel(curent_row_node)
return (max_otv, max_otv_node_num)
def rfile_analyze(rastr,path_rfile,centr):
rastr.Load(Get_RG_REPL(), path_rfile, '')
try:
tables = rastr.Tables
table_com_opf = tables('com_opf')
com_opf_col_centr = table_com_opf.Cols('centr')
res1 = rastr.opf('s')
(max_otv1, max_otv_node_num1) = Get_max_otv(tables)
com_opf_col_centr.SetZ(0,centr)
res2 = rastr.opf('s')
rastr.rgm('')
(max_otv2, max_otv_node_num2) = Get_max_otv(tables)
str_res1 = ''
str_res2 = ''
if(abs(max_otv1) > GetMaxOtv() ) : str_res1 = "FAIL1"
if(abs(max_otv2) > GetMaxOtv() ) : str_res2 = "FAIL2"
print (str(path_rfile)+ ' : ' + str(res1) + ' - ' + str(res2) +' '+ ' max_otv1= '+ str(max_otv1)+ ' max_otv2= '+ str(max_otv2) + ' <> '+ str_res1 + ' - '+ str_res2
+ ' : ny1=' + str(max_otv_node_num1)+ ' ny2=' + str(max_otv_node_num2) )
except OSError as err:
print("OS error:", err)
except ValueError:
print("Could not convert data to an integer.")
except Exception as ex:
print('type{type(ex)}')
except :
print('xz')
def scan_dir(path_2_scan_dir):
#app = c32.gencache.EnsureDispatch('astra.rastr')
rastr=c32.Dispatch('astra.rastr')
print(rastr.__module__)
print( 'scan-> ' + path_2_scan_dir )
folder_names = os.listdir(path_2_scan_dir)
#print(folder_names)
for centr in GetCentrs() :
print(centr)
print('--------------------------- '+str(centr)+' -----------------------------------')
for folder_name in folder_names:
path_2_folder = path_2_scan_dir+'\'+ folder_name
#print(path_2_folder)
if os.path.isdir(path_2_folder):
#print(path_2_folder)
path_2_file = path_2_folder+ '\'+GetScnaFName()
if os.path.isfile(path_2_file) :
#print (path_2_file)
rfile_analyze(rastr,path_2_file,centr)
continue
else:
print ( f'no file: {path_2_file}' )
scan_dir( r'D:VmsSHARAcrossesODU_SB2022_11_18_archmup')
|
|
|
|
Nick_A
Посетитель
Всего сообщений: 45
Дата регистрации: 30.09.2021
|
Создано:
21.12.2022 15:01:06
|
|
Спасибо. В бОльшей части всё понятно... Кроме главного - при создании объекта rastrt возникает исключение (и даже при обработке первого исключения возникает второе... исключение в квадрате)
Код |
---|
Traceback (most recent call last):
File "C:UsersBruckij-StempkovskijAppDataRoamingPythonPython310site-packageswin32comclientdynamic.py", line 86, in _GetGoodDispatch
IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221021, 'Операция недоступна', None, None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:RastrНовая схемаМакросыОбработка моделейОбновление топологииopen.py", line 4, in <module>
rastr = c32.Dispatch('astra.rastr')
File "C:UsersBruckij-StempkovskijAppDataRoamingPythonPython310site-packageswin32comclient__init__.py", line 117, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch, userName, clsctx)
File "C:UsersBruckij-StempkovskijAppDataRoamingPythonPython310site-packageswin32comclientdynamic.py", line 106, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:UsersBruckij-StempkovskijAppDataRoamingPythonPython310site-packageswin32comclientdynamic.py", line 88, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(
pywintypes.com_error: (-2147221164, 'Класс не зарегистрирован', None, None)
|
|
|
|
Александр Александров
Администратор
Всего сообщений: 657
Дата регистрации: 31.05.2008
|
Создано:
21.12.2022 15:56:23
|
наверное у вас Растр 32 бита а Питон 64 или наоборот
|
|
|
Nick_A
Посетитель
Всего сообщений: 45
Дата регистрации: 30.09.2021
|
Создано:
31.05.2024 17:43:47
|
Здравствуйте. Подскажите пожалуйста, почему не отображаются новые поля?
Код |
---|
import win32com.client as c32
rastr=c32.Dispatch('astra.rastr') # объект растр
rastr.Load(1, './test.rg2', '') # загрузка файла
rastr.tables("node").cols.Add("Repair", 3) # добавление поля логического типа
rastr.tables("node").Cols("Repair").SetProp(4, 'Ремонт') # установка названия
rastr.Save(r'D:ProgrammingRastrtest_.rg2', '') # сохранение файла под новым именем
|
Если сформированный файл загрузить в python, созданное поле в нем уже есть. оно заполнено значением False, а попытка добавить такое поле еще раз приведет к исключению. Однако, если загрузить файл в Rastr, данного поля нет (ни в выборе поля из таблицы, ни в файлы -> настройка программы -> Параметры. Почему колонка не отображается?
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1042
Дата регистрации: 23.04.2007
|
Создано:
31.05.2024 20:17:56
|
Потому что Вы манипулируете файлом в python без шаблона, и все поля, которые Вы добавили сохраняются и читаются. А в Растр Вы, по всей видимости, загружаете по шаблону "режим.rg2", в котором полей этих нет и шаблон накладывает на загружаемый файл свою структуру.
Середина 2024 года. Народ пишет вариантные расчеты.
|
|
|
Nick_A
Посетитель
Всего сообщений: 45
Дата регистрации: 30.09.2021
|
Создано:
03.06.2024 10:59:07
|
Как в таком случае подгружать шаблон?
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
03.06.2024 12:08:58
|
Цитата |
---|
Середина 2024 года. Народ пишет вариантные расчеты. |
Растр к середине 2024 года не смог реализовать этот компонент у себя в удобоваримом и конкурентом виде, вот каждый и пытается сам это реализовать.
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1042
Дата регистрации: 23.04.2007
|
Создано:
03.06.2024 12:35:32
|
Ну второй же параметр у Save/Load - путь к шаблону же.
Да Вы что.... Какая, право, досада...
Конкуренты тут вот скоро статейку опубликуют про то как проектировать надо.
Ну, удачи.
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
03.06.2024 13:38:26
|
Цитата |
---|
Да Вы что.... Какая, право, досада... |
А где же тут удобоваримый? Вся настройка через макрос, как и запуск.
А как дела обстоят с вариантными расчетами для 5-10 rg2 файлов? Каждый нужно открывать в Растре, настраивать и запускать макрос?
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1042
Дата регистрации: 23.04.2007
|
Создано:
03.06.2024 14:33:55
|
Вот Вы как себе представляете работу ? Типа:
>You are an engineer, who is responsible to complete a project that satisfies all the requirements of the system operator. Download files from their portal and arrange everything in the form of a beautiful PDF
>...
>Certainly, your project is ready to download at the following link, or should I send it to them ?
Подозреваю что года через три это станет реальностью. По-английски, скорее всего.
А если серьезно - то Вы как хотите-то чтобы было ? Может уже есть чего у конкурентов и правда ? И они даже..., где-то поблизости еще ?
|
|
|
Nick_A
Посетитель
Всего сообщений: 45
Дата регистрации: 30.09.2021
|
Создано:
06.06.2024 18:04:32
|
|
Добрый день. Подскажите пожалуйста, как работает SetSel с таблицами. Вот кусочек кода:
Код |
---|
def get_current_mode_with_sel(
self,
tables: dict[str, tuple[tuple[str], str]]
) -> dict[str, pd.DataFrame]:
"""
Получает текущее состояние энергетической системы в виде словаря с pandas DataFrame.
Аргументы:
tables (dict[str, tuple[str]]): Словарь:
ключи : str - наименования требуемых таблиц
значения: tuple - кортежи:
tuple: Кортеж с перчнем требуемых колонок
str : Конструкт для выборки, передваемый методу SetSel
Returns:
dict[str, pd.DataFrame]: Словарь, содержащий pandas DataFrame
"""
result = {}
for table, (cols, sel) in tables.items():
table_dict = dict((col, list()) for col in cols)
self.model.tables(table).SetSel(sel)
i = self.model.tables(table).FindNextSel(-1)
while i != -1:
for col in cols:
table_dict[col].append(self.model.tables(table).cols(col).Z(i))
i = self.model.tables(table).FindNextSel(i)
result[table] = pd.DataFrame(table_dict)
return result
|
Вызов метода:
Код |
---|
rastr.get_current_mode_with_sel({'vetv': (('ip', 'iq', 'pl_ip', 'pl_iq',), 'ip < 1000')})
|
Код должен сделать выборку в таблице vetv по условию "номер начала меньше 1000". Вывести только номер начала/конца и переток Р. Однако выводится вся таблица, итерирование происходит по всем индексам, а не только по тем, что подходят по условию
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1042
Дата регистрации: 23.04.2007
|
Создано:
06.06.2024 18:36:14
|
SetSel ставится на экземпляр таблицы, не на саму таблицу.
Ну типа нельзя написать в VB
Код |
---|
Rastr.Tables("node").SetSel("uhom>100")
' выборка скончалась вместе с выходом из области видимости
ndx = Rastr.Tables("node").FindNextSel(-1) |
но можно
Код |
---|
Set tblNode = Rastr.Tables("node")
tblNode.SetSel("uhom>100")
ndx = tblNode.FindNextSel(-1) |
skilbox Сейчас мистраль у нас станет МДП считать
Так все прям чинно, благородно, docstrings... Но я бы с pytest бы начал бы
|
|
|
Nick_A
Посетитель
Всего сообщений: 45
Дата регистрации: 30.09.2021
|
Создано:
06.06.2024 18:49:09
|
Замечательно!! Думал, этот механизм живет вместе с таблицей где-то. Спасибо
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1042
Дата регистрации: 23.04.2007
|
Создано:
06.06.2024 22:00:41
|
Хочет кстати кто-нибудь поволонтерить на git с gRPC-клиентом на python для rastr ? COM-то, того, не ровён час.
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1042
Дата регистрации: 23.04.2007
|
Создано:
08.06.2024 14:29:31
|
Как я и уповал: конкуренты таки сделали проектирование
Тут как бы их контент, ваш купец, но есть текст чуть более практичесий.
|
|
|
Михаил Одинцов
Постоянный посетитель
Всего сообщений: 148
Дата регистрации: 22.07.2008
|
Создано:
08.08.2024 14:24:35
|
Продам душу за код на Питон (для тех кто слабо шарит в программировании), который подключается к библиотеке логирования Растра (протоколу) и вытаскивает текст лога при наступлении события.
|
|
|