Я новичок и немного заблудился с написанным мною кодом. Я пишу надстройку для некоторого программного обеспечения, пытаясь извлечь некоторые данные из его классов.
Существует список операторов, для которых я выполняю оператор. Меня интересуют два типа операторов, которые называются VC_STATEMENT_LINMOTION и VC_STATEMENT_PTPMOTION (есть также много других типов).
Сначала в моем коде я вижу, какой из этих двух типов утверждений идет первым. Если это LinMotion, то я получаю некоторые значения извлечения для этого оператора LinMotion (переходя к этой функции (def get_initalvalues ())), пока код не «встретит» оператор PtpMotion. После этого он переходит к функции def get_conf (), где извлекаются данные для PtpMotion. Кроме того, в get_conf (), если позднее встречается LinMotion, данные берутся из PtpMotion последней итерации.
Но это не работает.
Я знаю, это звучит тяжело))). Может быть, я сам сделал это слишком сложным, а решение проще.
for statement in main_routine.Statements:
if statement.Type == VC_STATEMENT_LINMOTION or statement.Type == VC_STATEMENT_PTPMOTION:
def get_conf(*args):
global output
if statement.Type == VC_STATEMENT_PTPMOTION:
ptp_motion_conf = ""
Extracted string data is assigned to ptp_motion_conf which is later added to overall output
output += ptp_motion_conf
elif statement.Type == VC_STATEMENT_LINMOTION:
output += ptp_motion_conf #using data of VC_STATEMENT_PTPMOTION from last iteration
def get_initialconf(*args):
global output
if statement.Type == VC_STATEMENT_LINMOTION:
...
elif statement.Type == VC_STATEMENT_PTPMOTION:
get_conf()
statements = [] # getting list of statements to know which of LinMotion or PtpMotion goes first
for statement in main_routine.Statements:
statements.append(statement.Type)
if statements.index("LinMotion") < statements.index("PtpMotion"): #statement LinMotion goes first
get_initialconf()
elif statements.index("LinMotion") > statements.index("PtpMotion"):#statement PtpMotion goes first
get_conf()
Я постараюсь показать в примере:
Если оператор LinMotions идет первым, перед PtpMotion, то:
LinMotion (некоторые специальные исходные данные)
LinMotion (все еще исходные данные)
...
во всех других операторах LinMotion программа до сих пор использует исходные данные до появления оператора PtpMotion:
PtpMotion (собственные данные PtpMotion)
если снова появляется LinMotion, используются данные из последнего оператора PtpMotion
Если оператор PtpMotion идет первым, перед LinMotion, тогда
PtpMotion (собственные данные PtpMotion)
Если появляется Linmotion, используются данные из последнего оператора PtpMotion