0923补充

(5)当大家张口数据结构,闭口算法时,我却感觉完成诸如管理系统之类的开发,数据结构与算法用得并不多。不知您工作中哪些地方用到这方面的知识?您觉得是否真的有必要下大力气去学好数据结构与算法,如果真想学好的话,有什么好的建议?

      这个问题不得不说java语言工业化的成熟度,当然这一点C也是。数据结构和算法,只要是编码就用得到,只是工业化语言太完善了,这些都封装好了,完全没必要重复造轮子(造得不见得更好)。学好数据结构与算法的区别就是,这些地方出问题了,学好的人分分钟定位问题解决问题,没学好的人先翻书再看源码,想半边兴许能找到问题,效率上没法比。而且这些学好了,转其它语言开发也就是一两周的事。否则当面对一个只有编译器和api的开发环境,所有的轮子要造一遍,这时候不会数据结构和算法就得现学啦。

(7)看一些著名框架的源码应该是一种很好的学习方法,不过有时感觉看着看着会模糊起来,因为感觉有些设计上太复杂了。不知您在看源码时有什么好的方法?
     看源码其实和工作中看同事的代码是一个道理。当你不知道原作者的代码是要解决什么问题的(即需求),就很难看得懂。当不知道其采用什么方法解决的,对代码结构就很难掌握。所以读源码之前,先搞明白它是解决什么问题的,再搞清楚它用什么方法解决的,对代码有一个结构性的认识,再读结节实现。这也是为什么开源没有文档就很麻烦。

import tkinter as tk from tkinter import filedialog import os import re import sys from elftools.elf.elffile import ELFFile import subprocess import json # 确定应用程序是脚本文件还是被冻结的exe if getattr(sys, 'frozen', False): # 获取应用程序exe的路径 pathorigin = os.path.dirname(sys.executable) elif __file__: # 获取脚本程序的路径 pathorigin = os.path.dirname(__file__) #--寻找当前路径下的path_config文件 path_config_path = os.path.join(pathorigin, 'path_config.json') print(path_config_path) # config_path = config_path.replace('\\','\\\\') # 读取JSON文件并加载为字典 with open(path_config_path, 'r', encoding='utf-8') as f:# ConfigPath_dict = json.load(f) A2LUpdata_fold = ConfigPath_dict['A2LUpdata_fold'] def parseDwarfOutput(elfFileName,path11):#根据elf生成dwarf path = os.path.dirname(os.path.abspath(__file__)) #print(path) ps = subprocess.Popen(path11 + "\\objdump --dwarf=info " + elfFileName, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) dwarf = ps.communicate()[0].decode('latin-1') #print with open(os.path.join(A2LUpdata_fold, 'dwarf_info1.txt'), "w", encoding='utf-8') as dwarfFile: dwarfFile.write(dwarf) def extract_type11_10(s): # 使用 . 分割字符串 parts = s.split('.') # 检查是否正好有三部分 if len(parts) == 3: third_part = parts[2]#------这里进行a.b.c[x]形式的判断 if ('[' not in parts[0]): # 检查第三部分是否包含 [ if '[' in third_part: # 找到 [ 的位置 left_bracket_index = third_part.find('[') # 找到 ] 的位置 right_bracket_index = third_part.find(']', left_bracket_index) # 提取 [ 左边和 [] 中间的内容 if left_bracket_index != -1 and right_bracket_index != -1: content_before_bracket = third_part[:left_bracket_index] content_inside_brackets = third_part[left_bracket_index + 1:right_bracket_index] return '10',parts[0],parts[1],content_before_bracket, content_inside_brackets if(('[' not in parts[0]) and ('[' not in parts[1]) and ('[' not in parts[2])): return '11',parts[0],parts[1],parts[2],None return None,None,None,None,None def extract_components9(input_string):#A[X].B[Y].C,匹配出ABCXY # 定义正则表达式 pattern = r"^([^\[\]]+)\[([^\[\]]+)\]\.([^\[\]]+)\[([^\[\]]+)\]\.([^\[\]]+)$" flag = 0 A = 'null' B = 'null' C = 'null' X = 'null' Y = 'null' # 匹配字符串 match = re.match(pattern, input_string) if match: # 提取匹配的组 A = match.group(1) X = match.group(2) B = match.group(3) Y = match.group(4) C = match.group(5) flag = 9 return flag,A, B, C, X, Y def extract_components(s): # 统计 '.' 和 '[' 的数量 dot_count = s.count('.') bracket_count = s.count('[') a = 'null' x = 'null' b = 'null' c = 'null' y = 'null' flag = 'null' flag,a, b, c, x, y = extract_components9(s) # 如果存在两个 '.' if flag == 9: flag = 9 elif dot_count == 2: # 匹配 a[x].b.c[y] 格式 match = re.match(r'^([^\[\].]+)\[([^\[\]]+)\]\.([^\[\].]+)\.([^\[\].]+)\[([^\[\]]+)\]$', s) if match: a, x, b, c, y = match.groups() flag = '8' # 如果存在两个 '[' elif bracket_count == 2: # 匹配 a[x][y].b 格式 match = re.match(r'^([^\[\].]+)\[([^\[\]]+)\]\[([^\[\]]+)\]\.([^\[\].]+)$', s) if match: a, x, y, b = match.groups() flag = '6' # 其他情况(默认匹配 a[x].b 格式) else: # 匹配 a[x].b 格式 match = re.match(r'^([^\[\].]+)\[([^\[\]]+)\]\.([^\[\].]+)$', s) if match: a, x, b = match.groups() flag = '5' return a,x,b,c,y,flag def check_bracket_before_first_dot(s): # 找到第一个 '.' 的位置 dot_index = s.find('.') # 如果不存在 '.',直接返回标志位 0 if dot_index == -1: return 0 # 检查第一个 '.' 之前是否有 '[' if '[' in s[:dot_index]: return 1 # 标志位为 1 else: return 0 # 标志位为 0 def parse_name(name): flag = 'null' a = 'null' b = 'null' x = 'null' y = 'null' c = 'null' d = 'null' z = 'null' # 定义正则表达式匹配规则 type,result1,result2,result3,result4 = extract_type11_10(name) if type: flag = type a = result1 b = result2 x = result3 y = result4 elif(check_bracket_before_first_dot(name)): a,b,c,d,x,flag = extract_components(name) else: pattern = re.compile(r'^([^\[\].]+)(?:\.([^\[\].]+))?(?:\[([^\[\]]+)\])?(?:\[([^\[\]]+)\])?(?:\.([^\[\].]+))?(?:\.([^\[\].]+))?(?:\[([^\[\]]+)\])?$') # 匹配字符串 match = pattern.match(name) if not match: return None # 提取各部分 a = match.group(1) b = match.group(2) x = match.group(3) y = match.group(4) c = match.group(5) d = match.group(6) z = match.group(7) # 根据提取结果确定 flag if not b and not x and not y and not c and not d and not z: flag = 1 # 情况 1: a elif b and not x and not y and not c and not d and not z: flag = 2 # 情况 2: a.b elif x and not b and not y and not c and not d and not z: flag = 3 # 情况 3: a[x] elif b and x and not y and not c and not d and not z: flag = 4 # 情况 4: a.b[x] elif x and b and not y and not c and not d and not z: flag = 5 # 情况 5: a[x].b elif x and y and b and not c and not d and not z: flag = 6 # 情况 6: a[x][y].b elif b and x and c and not y and not d and not z: flag = 7 # 情况 7: a.b[x].c elif x and b and c and y and not d and not z: flag = 8 # 情况 8: a[x].b.c[y] else: flag = 0 # 未知情况 # 返回结果 return flag,a,b,x,y,c,d,z def structgetaddr(structname,vname,classes,it_dict,list11):#(结构体作为主型)a.b类型,获取a.b的地址 address = '0' currenttype = '0' skipflag = 0 for cla in classes:#找到结构体名 if skipflag == 1: break if(structname == cla.name):#找到了结构体 initaddr = cla.address#找到结构体的初始地址 for dit in it_dict.keys():#找到了键的索引 if skipflag == 1: break if(dit == cla.type):#找到了键的索引 for va in list11:#这个列表里面都是字典,字典里面都是列表,列表中还是字典list11这里有问题????? #print(va.keys()) if skipflag == 1: break for structnum,value0 in va.items(): if skipflag == 1: break if(structnum == it_dict[dit]):#如果找到的结构体编号等于索引字典的值 for list12 in value0:#这里面都是列表,列表中的内容都是字典 if skipflag == 1: break for keylist12,valuelist12 in list12.items(): if skipflag == 1: break if(vname == keylist12):#找到了这个变量 address = str(hex(int(initaddr, 16) + int(valuelist12[1], 10))) currenttype = valuelist12[0] skipflag = 1 break return address,currenttype def arraygetaddr(first_part,second_part,third_part,classes,arrayclasslist11):#(二维数组作为主型)二维数组,获取a[x][y]的地址 address0 = '' address = '0' currenttype = '0' skipflag = 0 for cla in classes:#变量的结构体都是统一的 if skipflag == 1: break if(first_part == cla.name):#到这里就是找到了变量名,找到了数组名,数组是直接,变量到数组结构 address0 = cla.address#找到初始地址 for iarray in arrayclasslist11:#对所有的数组出手 if(iarray.name == cla.type):#找到匿名地址----------- #数组类---------------这一块没有找匿名就直接找数组了,数组没有匿名哦 allnum = int(iarray.numtotal)#总数 sonmux = 1 for son in iarray.golist: sonmux = sonmux*(int(son) + 1)#得到数组的总大小 uint = allnum/sonmux layernum = (int(iarray.golist[1]) + 1)*int(uint) nowlayer = int(int(second_part))*layernum addresslayer = nowlayer + (int(third_part))*int(uint) address1 = hex(int(address0,16) + int(str(addresslayer),10)) address = str(address1) currenttype = iarray.searvh skipflag = 1 break return address,currenttype def arraygetaddr1(first_part,second_part,classes,arrayclasslist11):#(一维数组作为主型)一维数组,获取a[x]的地址 address0 = '' address = '0' currenttype = '0' skipflag = 0 for cla in classes:#变量的结构体都是统一的 if skipflag == 1: break if(first_part == cla.name):#到这里就是找到了数组名 address0 = cla.address for iarray in arrayclasslist11:#数组类 if skipflag == 1: break if(cla.type == iarray.name):#类型地址等于数组的编号 allnum = int(iarray.numtotal)#总数 sonmux = 1 for son in iarray.golist: sonmux = sonmux*(int(son) + 1)#得到数组的总大小 uint = allnum/sonmux #layernum = (int(iarray.golist[1]) + 1)*uint #nowlayer = int(second_part+1)*layernum addresslayer = (int(second_part))*int(uint) address1 = hex(int(address0,16) + int(str(addresslayer),10)) address = str(address1) currenttype = iarray.searvh skipflag = 1 break return address,currenttype def Sonstructgetaddr(searchtypename,vname,classes,it_dict,list11,arrayclasslist11,anydict):#(结构体作为子型)a.b类型,获取a.b的地址 initaddr = '0' address = '0' currenttype = '0' skipflag = 0 for dit in it_dict.keys():#找到了键的索引 if skipflag == 1: break if(dit == searchtypename):#通过数据类型找到结构体匿名 for va in list11:#这个列表里面都是字典,字典里面都是列表,列表中还是字典list11这里有问题????? #print(va.keys()) if skipflag == 1: break for structnum,value0 in va.items(): if skipflag == 1: break if(structnum == it_dict[dit]):#通过结构体匿名找到结构体 for list12 in value0:#这里面都是列表,列表中的内容都是字典 for keylist12,valuelist12 in list12.items(): if(vname == keylist12):#找到了结构体的这个成员 address = str(hex(int(initaddr, 16) + int(valuelist12[1], 10))) currenttype = valuelist12[0] skipflag = 1 break return address,currenttype#这里实际上就找到了结构体的这个成员相对于上一级的偏移 def Sonarraygetaddr(searchtype,second_part,third_part,classes,arrayclasslist11,anydict):#(二维数组作为子型)二维数组,获取a[x][y]的地址 address0 = '0' address = '0' currenttype = '0' skipflag = 0 for iarray in arrayclasslist11:#对所有的数组出手 if skipflag == 1: break if(iarray.name == searchtype):#找到匿名地址----------- #数组类---------------这一块没有找匿名就直接找数组了,数组没有匿名哦 allnum = int(iarray.numtotal)#总数 sonmux = 1 for son in iarray.golist: sonmux = sonmux*(int(son) + 1)#得到数组的总大小 uint = allnum/sonmux layernum = (int(iarray.golist[1]) + 1)*int(uint) nowlayer = int(int(second_part))*layernum addresslayer = nowlayer + (int(third_part))*int(uint) address1 = hex(int(address0,16) + int(str(addresslayer),10)) address = str(address1) currenttype = iarray.searvh skipflag = 1 break return address,currenttype#实际上的偏移 def Sonarraygetaddr1(searchtype,second_part,classes,arrayclasslist11,anydict):#(一维数组作为子型)一维数组,获取a[x]的地址 address0 = '0' address = '0' currenttype = '0' skipflag = 0 for iarray in arrayclasslist11:#数组类 if skipflag == 1: break if(searchtype == iarray.name):#类型地址等于数组的编号 allnum = int(iarray.numtotal)#总数 sonmux = 1 for son in iarray.golist: sonmux = sonmux*(int(son) + 1)#得到数组的总大小 uint = allnum/sonmux #layernum = (int(iarray.golist[1]) + 1)*uint #nowlayer = int(second_part+1)*layernum addresslayer = (int(second_part))*int(uint) address1 = hex(int(address0,16) + int(str(addresslayer),10)) address = str(address1) currenttype = iarray.searvh skipflag = 1 break return address,currenttype#实际上的偏移 #---------------------对于elf生成需要对结构体和数组进行处理的文件 def dwarfdo(dwarfaddr):#根据dwarf文件生成需要的文件 # 正则表达式 structure_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:.*\(DW_TAG_structure_type\)') member_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:.*\(DW_TAG_member\)') name_pattern = re.compile(r'^\s*<[0-9a-f]+>\s+DW_AT_name\s+.*:\s+(.*)') offset_pattern = re.compile(r'DW_OP_plus_uconst:\s*(\d+)') Stop_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:\sAbbrev\sNumber:\s0') #------- typedef_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:.*\(DW_TAG_typedef\)')#找到匿名变量 searchvalue_pattern = re.compile(r'^\s*<[0-9a-f]+>\s*DW_AT_type\s*:\s<0x([0-9a-f]+)>') #找打匿名变量的信息 # 存储结果 #----- var_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:.*\(DW_TAG_variable\)') varname_pattern = re.compile(r'^\s*<[0-9a-f]+>\s+DW_AT_name\s+.*:\s+(.*)') vartype_pattern = re.compile(r'^\s*<[0-9a-f]+>\s*DW_AT_type\s*:\s<0x([0-9a-f]+)>') varaddr_pattern = re.compile(r'\(DW_OP_addr:\s*([0-9a-f]+)\)') #-----存储数组 array_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:.*\(DW_TAG_array_type\)')#找到数组,type已经有正则表达式了 arraysearch_pattern = re.compile(r'^\s*<[0-9a-f]+>\s*DW_AT_type\s*:\s<0x([0-9a-f]+)>') #找到数组到匿名的索引 arrayinfo_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:.*\(DW_TAG_array_type\)')#找到数组结构信息 arrnumnum_pattern = re.compile(r'DW_AT_upper_bound\s*:\s*(\d+)')#找到数组的结构大小0-x,0-y,0-z basepattern_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:\sAbbrev\sNumber:\s')#找到基本数据类型这个直接用search basenumpattern_pattern = re.compile(r'DW_AT_byte_size\s*:\s*(\d+)')#找到基础数据类型的大小-这个也用search # baseupper_pattern = re.compile(r'DW_AT_upper_bound\s*:\s*(\d+)')# #-----------------------匹配任意的编号到数据类型的索引 anytypehead_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:\s*Abbrev\sNumber:')#search匹配任意头 anytypeend_pattern = re.compile(r'^\s*<[0-9a-f]+>\s*DW_AT_type\s*:\s<0x([0-9a-f]+)>')#match匹配整个 #-----------------------匹配任意的编号到数据类型的索引 class ALLClass: def __init__(self, name: str, type: str, address: str): self.name = name #结构体变量名称 self.type = type #结构体类型索引 self.address = address #结构体地址 class ALLClassArray: def __init__(self, name: str, numtotal: str, searvh:str,golist):#记录出来名字,总大小,深度,单位大小---- #------注意基本单位并不是真正的基本单位,这里只有找到单位大小就可以了 self.name = name #数组名称 self.numtotal = numtotal #数组总大小 self.searvh = searvh #到匿名变量的索引 self.golist = golist #结构列表 classes = [] #----- results = {} current_structure = None current_member = None StartFlag = 0 StartFlag2 = 0 stopflag = 0 searchvalue_flag = 0#寻找匿名索引值得标志位 alone_dict = {} all_dict = {} list001 = []#列表里面全都是字典,字典的键是结构体名,字典的值是列表,列表里面是变量名对应偏移量的字典 listson = []#子表 #----- listypedef = []#用于存储中间索引的列表 it_dict = {}#用于存储中间索引的字典 #----- arraystart = 0 startflag = 0 arrayclass = {}#存储数组的基本大小--这个似乎不用了 arrayclasslist11 = []#存储编号,大小,索引,数组结构 numstart = 0 namemallstart = 0 searchstart = 0 #--------匹配任意DIE的类型 anydict = {} anyheadflag = 0 #--------匹配任意DIE的类型 # 逐行处理# #1,需求,寻找编号与对应的变量、偏移已经完成 #2,需求,构建索引结构体名的索引字典已经完成 #3,需求,构建一个类,类的内容分别是编号,名字,地址,类型已经完成 with open(dwarfaddr, 'r', encoding='utf-8') as file: lines = file.readlines() # 读取所有行到列表中 for line in lines: line = line.rstrip() # 去除行尾的空白字符 #---------匹配结构体内部变量 #---------匹配结构体内部变量 structure_match = structure_pattern.match(line) member_match = member_pattern.match(line) name_match = name_pattern.match(line) offset_match = offset_pattern.search(line) stop_match = Stop_pattern.match(line) #---------匹配索引 typedef_match = typedef_pattern.match(line) searchvalue_match = searchvalue_pattern.match(line) #---------匹配结构体变量 var_match = var_pattern.match(line) varname_match = varname_pattern.match(line) vartype_match = vartype_pattern.match(line) varaddr_match = varaddr_pattern.search(line) #---------数组处理 # array_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:.*\(DW_TAG_array_type\)')#找到数组,type已经有正则表达式了 # arrayclass_pattern = re.compile(r'^\s*<\d+><([0-9a-f]+)>:.*\(DW_TAG_base_type\)')#找到基本数据类型 # arrnum_pattern = re.compile(r'DW_AT_byte_size\s*:\s*(\d+)')#找到基础数据类型的大小 # array_match = array_pattern.match(line) # arrayclass_match = arrayclass_pattern.match(line) # arrnum_match = arrnum_pattern.search(line) array_match = array_pattern.match(line) arraysearch_match = arraysearch_pattern.match(line) arrayinfo_match = arrayinfo_pattern.match(line) arrnumnum_match = arrnumnum_pattern.search(line) basepattern_match = basepattern_pattern.search(line) basenumpattern_match = basenumpattern_pattern.search(line) #------------------------------------匹配任意的数据类型 anytypehead_match = anytypehead_pattern.search(line) anytypeend_match = anytypeend_pattern.match(line) #------------------------------------匹配任意的数据类型 if structure_match:#当前是结构体定义处,提取编号 current_structure = structure_match.group(1) #results[current_structure] = {} StartFlag = 1 listson = [] stopflag = 1 cuttent_array = [] # 匹配成员 # elif member_match and (StartFlag == 1):#遇到成员,提取成员名与偏移 # current_member = member_match.group(1)#标记出遇到结构体的成员了 #doit #StartFlag2 = 1 #print(current_member) elif StartFlag and name_match: # print(name_match.group(1))#获取变量名 current_name = name_match.group(1) elif StartFlag and anytypeend_match: cruuenttype = anytypeend_match.group(1) cuttent_array.append(cruuenttype) elif StartFlag and offset_match: #print(offset_match.group(1))#获取上面变量名对应的偏移 current_offset = offset_match.group(1) cuttent_array.append(current_offset) alone_dict = {current_name: cuttent_array}#到这里取出一对,就建立一个字典,变量名是键偏移量是值 listson.append(alone_dict)#增加一个偏移 cuttent_array = [] elif stop_match and stopflag:#到这种时候,就代表一个结构体的内容处理完成了,接下来整理数据就好了 all_dict = {current_structure: listson} # for i in listson: # print(i) list001.append(all_dict) StartFlag = 0#处理完成标志 stopflag = 0 #这一部分是编号变量名的 #下面一部分是编号结构体名的 if typedef_match:#遇到了匿名索引 typedef_name = typedef_match.group(1)#找到匿名索引的键 searchvalue_flag = 1 elif searchvalue_flag and searchvalue_match:#找到了键,现在要找值 typedef_value = searchvalue_match.group(1) #my_dict = {typedef_name,typedef_value} it_dict[typedef_name] = typedef_value #listypedef.append(my_dict) searchvalue_flag = 0 #这一步是为了构建一个列表,列表里面有许多类,用来索引结构体的名称 if var_match: startflag = 1 elif startflag and varname_match: varname = varname_match.group(1) #print(varname) elif startflag and vartype_match: vartype = vartype_match.group(1) #print(vartype) elif startflag and varaddr_match: varaddr = varaddr_match.group(1) #print(varaddr) classes.append(ALLClass(varname,vartype,varaddr)) startflag = 0 #这里进行数组的处理找到数组中间索引-----------------找到数组变量,数组地址,数组大小,数组索引。深度, #print(line) if array_match:#找到array的DIE name = array_match.group(1)#记录数组编号 arraystart = 1#遇到数组才开始 namemallstart = 1 searchstart = 1 list004 = []#列表为空 #似乎不需要增加新的逻辑,因为每个数组与结构都是一一对应的 elif namemallstart and arraystart and basenumpattern_match:#这个大小是总大小,与数组在一起就一起记录 namemall = basenumpattern_match.group(1)#找到数组总大小并记录 namemallstart = 0 elif searchstart and arraystart and arraysearch_match:#找到找到数组到匿名变量的索引 searvh = arraysearch_match.group(1) searchstart = 0 elif arraystart and arrnumnum_match:#从这里开始记录数组结构 go = arrnumnum_match.group(1)#记录数据的结构 list004.append(go) elif arraystart and stop_match:#到停止的时候就收集信息,收集编号名称,总大小 arrayclasslist11.append(ALLClassArray(name,namemall,searvh,list004)) arraystart = 0# namemallstart = 0 searchstart = 0 #----------------到这里把数组的array块的DIE给解决了 # ---------------------------------------------这里解决数组的基础数据信息 # if basepattern_pattern:#可以索引出来大小的时候 # numhead = basepattern_pattern.group(1) # numstart = 1 # elif numstart and basenumpattern_pattern: # numend = basenumpattern_pattern.group(1) if anytypehead_match:#匹配到编号头, <2><9cb3f4>: anyhead = anytypehead_match.group(1) anyheadflag = 1 elif anyheadflag and anytypeend_match:#匹配到编号尾, <9cb3fc> DW_AT_type : <0x9cadba> anytype = anytypeend_match.group(1)# anydict[anyhead] = anytype anyheadflag = 0 return list001,it_dict,classes,arrayclasslist11,anydict def Getaddressfromelf(input_string,dict,classes):#直接从ELF里的MAP使用简单变量的,变量名与地址的对应关系更新地址-0923类型 # 提取 Name 后面的字符串 lines = input_string.split('\n') # 将字符串按行分割 result_lines = [] Address = '' for line in lines: skipflag = 0 name_pattern = r'\s+/\*\s+Name\s+\*/\s+([^\s]+)'#获取名字 address_pattern = r'\s+/\*\s*ECU\s+Address\s+\*/\s+([^\s]+)'#获取地址 address_pattern1 = r'\s+ECU_ADDRESS\s+(\S+)\s+([^\s]+)' name_match = re.search(name_pattern, line) #print(name_match.group(1)) address_match = re.search(address_pattern, line) address_match1 = re.search(address_pattern1, line) if(address_match): address_match = address_match elif(address_match1): address_match = address_match1 if name_match: #print("Name Extracted:", name_match.group(1)) # 输出: Name Extracted: ABC123 Address = name_match.group(1) result_lines.append(line) # print(line) # print(Address) # 提取 ECU Address 后面的字符串 elif(address_match and (Address != '')): #print(line) b = address_match.group(1)# + ' ' + '/*' # print(dict[Address]) # if(Address in dict.keys()): # temp = dict[Address] # # print(temp) # temp = int(temp,16) # temp = hex(temp) # new_b = str(temp)# + ' ' + '/*' # line = line.replace(b,new_b) #print(dict[Address]) for cla in classes:#变量的结构体都是统一的 if(Address == cla.name):#到这里就是找到了数组名 address0 = cla.address temp = address0 # print(temp) temp = int(temp,16) temp = hex(temp) new_b = str(temp)# + ' ' + '/*' line = line.replace(b,new_b) result_lines.append(line) #print(line) elif not line.strip(): Address = '' result_lines.append(line) else: result_lines.append(line) return '\n'.join(result_lines) def Getaddressfromelf1227(input_string,dict,classes):#直接从ELF里的MAP使用简单变量的,变量名与地址的对应关系更新地址--1127类型 # 提取 Name 后面的字符串 lines = input_string.split('\n') # 将字符串按行分割 result_lines = [] Address = '' for line in lines: # name_pattern = r'\s+/\*\s+Name\s+\*/\s+([^\s]+)'#获取名字 # address_pattern = r'\s+/\*\s*ECU\s+Address\s+\*/\s+([^\s]+)'#获取地址 # address_pattern1 = r'\s+ECU_ADDRESS\s+(\S+)\s+([^\s]+)' name_pattern = re.compile(r'\s*/begin\s(CHARACTERISTIC|MEASUREMENT)\s(\S+)\s"')#匹配约定组与预定组的名字 address_pattern = re.compile(r'0xFE([0-9A-F]+)')#匹配地址 name_match = re.search(name_pattern, line) address_match = re.search(address_pattern, line) # address_pattern11 = re.compile(r'0xFE([0-9A-F]+)') # if(name_match): # address_match = address_match # elif(address_match1): # address_match = address_match1 if name_match: #print("Name Extracted:", name_match.group(1)) # 输出: Name Extracted: ABC123 Address = name_match.group(2) # if(Address == 'ADAS_bAutDrvCtlActv_E'): # print('doit') result_lines.append(line) # print(line) # print(Address) # 提取 ECU Address 后面的字符串 elif(address_match and (Address != '')): #print(line) b = 'FE' + address_match.group(1) b1 = 'fe' + address_match.group(1) # print(dict[Address]) # if(Address in dict.keys()): # temp = dict[Address] # # print(temp) # temp = int(temp,16) # temp = hex(temp).upper()[2:] # new_b = str(temp) # line = line.replace(b,new_b) # line = line.replace(b1,new_b) for cla in classes:#变量的结构体都是统一的 if(Address == cla.name):#到这里就是找到了数组名 address0 = cla.address temp = address0 # print(temp) temp = int(temp,16) temp = hex(temp).upper()[2:] new_b = str(temp)# + ' ' + '/*' line = line.replace(b,new_b) line = line.replace(b1,new_b) #print(dict[Address]) result_lines.append(line) #print(line) elif not line.strip(): Address = '' result_lines.append(line) else: result_lines.append(line) return '\n'.join(result_lines) def Getaddressfromelfplus(input_string,list11,it_dict,classes,arrayclasslist11,dict,anydict):#从elf获取地址,处理结构体,数组0923 # 提取 Name 后面的字符串 lines = input_string.split('\n') # 将字符串按行分割 result_lines = [] Address = '' flagvar = 'null' for line in lines: name_pattern = r'\s+/\*\s+Name\s+\*/\s+([^\s]+)'#获取名字 address_pattern = r'\s+/\*\s*ECU\s+Address\s+\*/\s+([^\s]+)'#获取地址 address_pattern1 = r'\s+ECU_ADDRESS\s+(\S+)\s+([^\s]+)' name_match = re.search(name_pattern, line) address_match = re.search(address_pattern, line) address_match1 = re.search(address_pattern1, line) if(address_match): address_match = address_match elif(address_match1): address_match = address_match1 if('TeBTRCTR_e_SysBatteryMode' in line): print('test') if name_match:#在这里对不同的数据结构,采用不同的数据处理方式 #print("Name Extracted:", name_match.group(1)) # 输出: Name Extracted: ABC123 Address = name_match.group(1)#Address就是名字 flagvar = 'null' # if('TeBTRCTR_e_SysBatteryMode' in Address): # print('test') # if 'TeBTRCTR_e_SysBatteryMode' in line: # print('this') flagvar,vara,varb,varx,vary,varc,vard,varz = parse_name(Address)#提取出数据类型,与各类型数据的情况 flagvar = str(flagvar) # 1,a-----flag,a一般形式已经处理过了 # 2,a.b-----flag,a,b # 3,a[x]-----flag,a,x---这里其实是二维数组 # 4,a.b[x]----flag,a,b,x # 5,a[x].b----flag,a,b,c # 6,a[x][y].b---flag,a,b,x,c # 7,a.b[x].c---flag,a,b,x,c # 8,a[x].b.c[y]---flag,a,b,c,d,x # 9, a[x].b[y].c---flag,a,b,c,d,x # 10,a.b.c[x]--- # result_lines.append(line) # print(line) # print(Address) # 提取 ECU Address 后面的字符串 elif(address_match and (Address != '') and (flagvar != 'null') ):#正是数据处理行,并且能识别出数据类型 #print(line) address = '' if(flagvar == '2'):#最普通的结构体类型,a.b类型,对应a.b,a.b[x] structname,vname = vara,varb#= Address.split('.')#分离出来变量 address,currenttype = structgetaddr(structname,vname,classes,it_dict,list11)#结构体更新出来了 #address = int(address,16) address = str(address).upper()[2:] #print(dict[Address]) #result_lines.append(line) # elif(flagvar == 2):#这种是最普通的多维数组类型,A[X][X],最多处理二维数组,后面增加通用处理功能 # address = ''#由于在a2l里面,数组只保留到次一级,二维数组只处理a[x][y].c类型 # if(re.search(r'\._\d+_\._(\d+)', Address)):#当前是二维数组 # first_part = Address.split('._')[0]#第一部分是名字 # second_part = re.search(r'\._(\d+)', Address)#第二部分是2,1,中的2 # third_part = re.search(r'\._\d+_\._(\d+)', Address)#2,1中的1 # #address0 = ''#首地址就从map里面找了,不用dwarf # address,currenttype = arraygetaddr(first_part,second_part,third_part,classes,arrayclasslist11) # address = str(address).upper()[2:] elif(flagvar == '3'):#a[x]形式,对应a[x][y],third_part默认赋值0 first_part = vara#Address.split('._')[0]#第一部分是名字 second_part = varx#re.search(r'\._(\d+)', Address)#第二部分是2,1,中的2 #third_part = re.search(r'\._\d+\._(\d+)', Address)#2,1中的1 #address0 = ''#首地址就从map里面找了,不用dwarf third_part = '0' address,currenttype = arraygetaddr(first_part,second_part,third_part,classes,arrayclasslist11)#要用二维数组的处理方式 #address = int(address,16) address = str(address).upper()[2:] elif(flagvar == '4'):#a.b[x]形式,对应a.b[x][y],third_part默认赋值0 initaddress = '' structname = vara arrayname = varb array1dex = varx third_part = '0' address,currenttype = structgetaddr(structname,arrayname,classes,it_dict,list11)#主结构体的地址与当前成员的类型 plusaddress,currenttype = Sonarraygetaddr(currenttype,array1dex,third_part,classes,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16))).upper()[2:] elif(flagvar == '5'):#a[x].b,对应a[x].b和a[x],b[y] first_part = vara second_part = varb vname = varc address,searchtype = arraygetaddr1(first_part,second_part,classes,arrayclasslist11)#初始地址 plusaddress,currenttype = Sonstructgetaddr(searchtype,vname,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16))).upper()[2:] elif(flagvar == '6'):#a[x][y].b二维主,对应a[x][y].b与a[x][y].b[z] first_part = vara second_part = varb third_part = varx vname = varc address,searchtype = arraygetaddr(first_part,second_part,third_part,classes,arrayclasslist11) plusaddress,currenttype = Sonstructgetaddr(searchtype,vname,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16))).upper()[2:] elif(flagvar == '7'):#a.b[x].c,对应a.b[x].c与a.b[x].c[z]结构体主,数组与结构体辅a.b,b[x],t.c initaddress = '' structname = vara arrayname = varb array1dex = varx vname = varc address,currenttype = structgetaddr(structname,arrayname,classes,it_dict,list11)#主结构体的地址与当前成员的类型 plusaddress,currenttype = Sonarraygetaddr1(currenttype,array1dex,classes,arrayclasslist11,anydict) plus1address,currenttype = Sonstructgetaddr(currenttype,vname,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16) + int(plus1address,16))).upper()[2:] elif(flagvar == '8'):#a[x].b.c[y]类型数组a[x]为主,这里其实就是a[x].b.c结构体数组,结构体里面同样有结构体 first_part = vara second_part = varb vname = varc vname1 = vard five_name = varx address,searchtype = arraygetaddr1(first_part,second_part,classes,arrayclasslist11)#初始地址 plusaddress,currenttype = Sonstructgetaddr(searchtype,vname,classes,it_dict,list11,arrayclasslist11,anydict) plusaddress1,currenttype = Sonstructgetaddr(currenttype,vname1,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16) + int(plusaddress1,16))).upper()[2:] elif(flagvar == '9'):#a[x].b[y].c类型 first_part = vara second_part = varb vname = varc vname1 = varx five_name = vard # print(vara) # print(varb) # print(varc) # print(vard) # print(varx) address,searchtype = arraygetaddr1(first_part,second_part,classes,arrayclasslist11)#初始地址 plusaddress1,currenttype = Sonstructgetaddr(searchtype,vname,classes,it_dict,list11,arrayclasslist11,anydict) plusaddress2,currenttype = Sonarraygetaddr1(currenttype,vname1,classes,arrayclasslist11,anydict) plusaddress3,currenttype = Sonstructgetaddr(currenttype,five_name,classes,it_dict,list11,arrayclasslist11,anydict) #CurrentTypenameDict[Address] = Ftypedict[currenttype] address = str(hex(int(address,16) + int(plusaddress1,16) + int(plusaddress2,16) + int(plusaddress3,16))).upper()[2:] elif(flagvar == '10'):#a.b.c[y],实际对应a.b.c[y][z]形式 First_part = vara Second_part = varb Third_part = varx Four_part = vary third_partarray = '0' address,searchtype = structgetaddr(First_part,Second_part,classes,it_dict,list11) plusaddress1,currenttype = Sonstructgetaddr(searchtype,Third_part,classes,it_dict,list11,arrayclasslist11,anydict) plusaddress2,currenttype = Sonarraygetaddr(currenttype,Four_part,third_partarray,classes,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress1,16) + int(plusaddress2,16))).upper()[2:] elif(flagvar == '11'):#a.b.c,实际对应a.b.c First_part = vara Second_part = varb Third_part = varx address,searchtype = structgetaddr(First_part,Second_part,classes,it_dict,list11) plusaddress1,currenttype = Sonstructgetaddr(searchtype,Third_part,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress1,16))).upper()[2:] if(address != ''):#确实把地址给更新掉了 b = address_match.group(1)#+ ' ' + '/*'#需要替代的 new_b = address# + ' ' + '/*'#新的 line = line.replace(b,new_b) result_lines.append(line) elif not line.strip():#空行代表进入到了下一个处理 Address = '' result_lines.append(line) else: result_lines.append(line) return '\n'.join(result_lines) def Getaddressfromelfplus1227(input_string,list11,it_dict,classes,arrayclasslist11,dict,anydict):#从elf获取地址,处理结构体与数组,1227 # 提取 Name 后面的字符串 lines = input_string.split('\n') # 将字符串按行分割 result_lines = [] Address = '' flagvar = 'null' for line in lines: # name_pattern = r'\s+/\*\s+Name\s+\*/\s+([^\s]+)'#获取名字 # address_pattern = r'\s+/\*\s*ECU\s+Address\s+\*/\s+([^\s]+)'#获取地址 # address_pattern1 = r'\s+ECU_ADDRESS\s+(\S+)\s+([^\s]+)' # name_match = re.search(name_pattern, line) # address_match = re.search(address_pattern, line) # address_match1 = re.search(address_pattern1, line) name_pattern = re.compile(r'\s*/begin\s(CHARACTERISTIC|MEASUREMENT)\s(\S+)\s"')#匹配约定组与预定组的名字 address_pattern = re.compile(r'0xFE([0-9A-F]+)')#匹配地址 name_match = re.search(name_pattern, line) address_match = re.search(address_pattern, line) # if(address_match): # address_match = address_match # elif(address_match1): # address_match = address_match1 if name_match: #print("Name Extracted:", name_match.group(1)) # 输出: Name Extracted: ABC123 Address = name_match.group(2) flagvar = 'null' if('testvar5[1].usCurrentHBStatus' in Address): print('test') flagvar,vara,varb,varx,vary,varc,vard,varz = parse_name(Address)#提取出数据类型,与各类型数据的情况 flagvar = str(flagvar) if 'STRUCTtest[1].test1111[1].ucProtectCnt' == Address: print(flagvar) print(vara) print(varb) print(varx) print(varc) print(vard) # if ('._' in Address):#结构体是1,数组是2,普通是0,0已经处理过了,这里就不再处理了 # flagtype = 2 # elif('.' in Address): # flagtype = 1 # else: # flagtype = 0 # result_lines.append(line) # # print(line) # # print(Address) # # 提取 ECU Address 后面的字符串 #print(line) result_lines.append(line) elif(address_match and (Address != '') and (flagvar != 'null') ): address = '' if(flagvar == '2'):#最普通的结构体类型,a.b structname,vname = vara,varb#= Address.split('.')#分离出来变量 address,currenttype = structgetaddr(structname,vname,classes,it_dict,list11)#结构体更新出来了 #address = int(address,16)#本身就是16进制 address = str(address).upper()[2:] #print(dict[Address]) #result_lines.append(line) # elif(flagvar == 2):#这种是最普通的多维数组类型,A[X][X],最多处理二维数组,后面增加通用处理功能 # address = ''#由于在a2l里面,数组只保留到次一级,二维数组只处理a[x][y].c类型 # if(re.search(r'\._\d+_\._(\d+)', Address)):#当前是二维数组 # first_part = Address.split('._')[0]#第一部分是名字 # second_part = re.search(r'\._(\d+)', Address)#第二部分是2,1,中的2 # third_part = re.search(r'\._\d+_\._(\d+)', Address)#2,1中的1 # #address0 = ''#首地址就从map里面找了,不用dwarf # address,currenttype = arraygetaddr(first_part,second_part,third_part,classes,arrayclasslist11) # address = str(address).upper()[2:] elif(flagvar == '3'):#当前是二维数组a[x][y] first_part = vara#Address.split('._')[0]#第一部分是名字 second_part = varx#re.search(r'\._(\d+)', Address)#第二部分是2,1,中的2 #third_part = re.search(r'\._\d+\._(\d+)', Address)#2,1中的1 #address0 = ''#首地址就从map里面找了,不用dwarf third_part = '0' address,currenttype = arraygetaddr(first_part,second_part,third_part,classes,arrayclasslist11)#实际一维数组 #address = int(address,16) address = str(address).upper()[2:] elif(flagvar == '4'):#a.b[x]主结构体与副数组 initaddress = '' structname = vara arrayname = varb array1dex = varx third_part = '0' address,currenttype = structgetaddr(structname,arrayname,classes,it_dict,list11)#主结构体的地址与当前成员的类型 plusaddress,currenttype = Sonarraygetaddr(currenttype,array1dex,third_part,classes,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16))).upper()[2:] elif(flagvar == '5'):#a[x].b数据类型 first_part = vara second_part = varb vname = varc address,searchtype = arraygetaddr1(first_part,second_part,classes,arrayclasslist11)#初始地址 plusaddress,currenttype = Sonstructgetaddr(searchtype,vname,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16))).upper()[2:] elif(flagvar == '6'):#a[x][y].b二维主,结构体辅 first_part = vara second_part = varb third_part = varx vname = varc address,searchtype = arraygetaddr(first_part,second_part,third_part,classes,arrayclasslist11) plusaddress,currenttype = Sonstructgetaddr(searchtype,vname,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16))).upper()[2:] elif(flagvar == '7'):#a.b[x].c,结构体主,数组与结构体辅a.b,b[x],t.c initaddress = '' structname = vara arrayname = varb array1dex = varx vname = varc#17b04c8是什么鬼,似乎sonarrayaddr1有问题 address,currenttype = structgetaddr(structname,arrayname,classes,it_dict,list11)#主结构体的地址与当前成员的类型 plusaddress,currenttype = Sonarraygetaddr1(currenttype,array1dex,classes,arrayclasslist11,anydict) plus1address,currenttype = Sonstructgetaddr(currenttype,vname,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16) + int(plus1address,16))).upper()[2:] elif(flagvar == '8'):#a[x].b.c[y]类型数组a[x]为主,这里其实就是a[x].b.c结构体数组,结构体里面同样有结构体 first_part = vara second_part = varb vname = varc vname1 = vard five_name = varx address,searchtype = arraygetaddr1(first_part,second_part,classes,arrayclasslist11)#初始地址 plusaddress,currenttype81 = Sonstructgetaddr(searchtype,vname,classes,it_dict,list11,arrayclasslist11,anydict) plusaddress1,currenttype = Sonstructgetaddr(currenttype81,vname1,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress,16) + int(plusaddress1,16))).upper()[2:] elif(flagvar == '9'):#a[x].b[y].c类型 first_part = vara second_part = varb vname = varc vname1 = varx five_name = vard # print(vara) # print(varb) # print(varc) # print(vard) # print(varx) address,searchtype = arraygetaddr1(first_part,second_part,classes,arrayclasslist11)#初始地址 plusaddress1,currenttype = Sonstructgetaddr(searchtype,vname,classes,it_dict,list11,arrayclasslist11,anydict) plusaddress2,currenttype = Sonarraygetaddr1(currenttype,vname1,classes,arrayclasslist11,anydict) plusaddress3,currenttype = Sonstructgetaddr(currenttype,five_name,classes,it_dict,list11,arrayclasslist11,anydict) #CurrentTypenameDict[Address] = Ftypedict[currenttype] address = str(hex(int(address,16) + int(plusaddress1,16) + int(plusaddress2,16) + int(plusaddress3,16))).upper()[2:] elif(flagvar == '10'):#a.b.c[y],实际对应a.b.c[y][z]形式 First_part = vara Second_part = varb Third_part = varx Four_part = vary third_partarray = '0' address,searchtype = structgetaddr(First_part,Second_part,classes,it_dict,list11) plusaddress1,currenttype = Sonstructgetaddr(searchtype,Third_part,classes,it_dict,list11,arrayclasslist11,anydict) plusaddress2,currenttype = Sonarraygetaddr(currenttype,Four_part,third_partarray,classes,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress1,16) + int(plusaddress2,16))).upper()[2:] elif(flagvar == '11'):#a.b.c,实际对应a.b.c First_part = vara Second_part = varb Third_part = varx address,searchtype = structgetaddr(First_part,Second_part,classes,it_dict,list11) plusaddress1,currenttype = Sonstructgetaddr(searchtype,Third_part,classes,it_dict,list11,arrayclasslist11,anydict) address = str(hex(int(address,16) + int(plusaddress1,16))).upper()[2:] if(address != ''):#确实把地址给更新掉了 b = 'FE' + address_match.group(1)# + ' ' + '/*'#需要替代的 b1 = 'fe' + address_match.group(1)# + ' ' + '/*'#需要替代的 new_b = address# + ' ' + '/*'#新的 line = line.replace(b,new_b) line = line.replace(b1,new_b) result_lines.append(line) elif not line.strip():#空行代表进入到了下一个处理 Address = '' result_lines.append(line) else: result_lines.append(line) return '\n'.join(result_lines) def get_variable_addresses(elf_file):#读取ELF文件,获取变量名与地址的字典 variable_addresses = {} with open(elf_file, 'rb') as f: elffile = ELFFile(f) # 获取符号表 symtab = elffile.get_section_by_name('.symtab') if symtab is None: print("No symbol table found.") return variable_addresses # 遍历符号表 for symbol in symtab.iter_symbols(): # 过滤出变量(通常类型为STT_OBJECT) if symbol['st_info']['type'] == 'STT_OBJECT': if(symbol.name == '_Rte_NAP_VeOUT_NAP_ICCNapTimeSetToEE_sig_VeOUT_NAP_ICCNapTimeSetToEE_sig'): print("success1111111111") variable_name = symbol.name[1:] variable_address = str(symbol['st_value']) print(variable_address) variable_addresses[variable_name] = variable_address return variable_addresses def replace_header_with_a2ml(code_str, head_str): # 查找 /begin MODULE 和 /end MODULE 之间的内容 begin_header_tag = ' /begin MODULE ModuleName' end_header_tag = ' /begin MOD_COMMON' # 找到 /begin MODULE 的起始位置 start_index = code_str.find(begin_header_tag) if start_index == -1: raise ValueError("The string 'code_str' does not contain '/begin MODULE'") # 找到 /end MODULE 的结束位置 end_index = code_str.find(end_header_tag, start_index) if end_index == -1: raise ValueError("The string 'code_str' does not contain '/end MODULE' after '/begin MODULE'") end_index += len(end_header_tag) # 查找 /begin A2ML 到最后一个 /end IF_DATA 之间的内容 begin_a2ml_tag = '/begin A2ML' end_if_data_tag = '/end IF_DATA' a2ml_start_index = head_str.find(begin_a2ml_tag) if a2ml_start_index == -1: raise ValueError("The string 'head_str' does not contain '/begin A2ML'") a2ml_end_index = head_str.rfind(end_if_data_tag, a2ml_start_index) if a2ml_end_index == -1 or a2ml_end_index < a2ml_start_index: raise ValueError("The string 'head_str' does not contain a valid '/end IF_DATA' after '/begin A2ML'") a2ml_end_index += len(end_if_data_tag) # 替换 code_str 中找到的内容为 head_str 中的相应部分 replaced_code = ( code_str[:start_index] + # code_str 中 /begin MODULE 之前的部分 begin_header_tag + '\n' + head_str[a2ml_start_index:a2ml_end_index] + # head_str 中的 A2ML 部分 end_header_tag + '\n' + code_str[end_index:] # code_str 中 /end MODULE 之后的部分 ) return replaced_code def process_string(input_string, offset_hex):#偏移函数 # 将偏移量转换为整数 offset = int(offset_hex,16) # 定义正则表达式模式 begin_pattern = re.compile(r'\s*/begin\s+CHARACTERISTIC')# address_pattern = re.compile(r'ECU\s+Address\s+[^0x]*?\s+(0x[\dA-Fa-f]+)') address_pattern11 = re.compile(r'0xFE([0-9A-F]+)') lines = input_string.split('\n') # 将字符串按行分割 result_lines = [] in_characteristic_section = False current_address = None for line in lines: # if ('VALUE 0xFEXFDD81AFBC15 Scalar_BOOLEAN 0 tvi_TqVectInf_FD_CM_boolea' in line): # print(';') stripped_line = line.rstrip() # 去除行尾的空白字符 if begin_pattern.search(stripped_line): in_characteristic_section = True result_lines.append(stripped_line) # 保留这行 continue if not stripped_line: # 遇到空行,退出特性部分处理 in_characteristic_section = False result_lines.append('') # 保留空行 continue if in_characteristic_section:#空行用于识别各块 address_match = re.search(address_pattern11, stripped_line)#行 if address_match: # 提取地址并转换为整数 current_address_hex = 'FE' + address_match.group(1) current_address = int(current_address_hex, 16) # 计算新地址并格式化为十六进制字符串 new_address = hex(current_address + offset - 0x100000000).upper()[2:] # 去除'0x'并转换为大写FEXXXX # 替换地址并构建新行 #current_address_hex = current_address_hex new_line = stripped_line.replace(current_address_hex, new_address) result_lines.append(new_line) else: # 如果不是地址行,则直接添加 result_lines.append(stripped_line) else: # 如果不在特性部分,则直接添加未处理的行 result_lines.append(stripped_line) return '\n'.join(result_lines) def select_folder():#打开窗口获取文件1 # root = tk.Tk() # root.withdraw() # 隐藏主窗口 # folder_selected = filedialog.askdirectory() folder_selected = A2LUpdata_fold print(folder_selected) if folder_selected: Code,ElfFile = process_folder(folder_selected) return Code,folder_selected,ElfFile def process_folder(folder_path,):#打开窗口获取文件2 head_content = None code_content = None for filename in os.listdir(folder_path): ElfFile = '1' if filename.endswith('.a2l') and ('master' in filename):#这个是Head with open(os.path.join(folder_path, filename), 'r', encoding='utf-8') as file: head_content = file.read() elif filename.endswith('.a2l') and 'Output_All' in filename:#这个是Code # 假设只存在两个 .a2l 文件,且其中一个包含 'head',则另一个即为 'Code' with open(os.path.join(folder_path, filename), 'r', encoding='utf-8') as file: code_content = file.read() elif filename.endswith('.elf'): ElfFile = os.path.join(folder_path, filename) if code_content:#head_content and #Head = head_content Code = code_content return Code,ElfFile #print("Head content:", Head) #print("Code content:", Code) print("success!") else: print("Failed to read all required files.") # 运行选择文件夹的函数 def resolve_dictionary(d): changed = True while changed: changed = False for key in d: value = d[key] if value in d and d[value] != value: # 检查值是否是其他键,并且不是自引用 d[key] = d[value] changed = True return d #主函数从这里开始 current_script_dir = 'F:\\' Head = '' Code = '' Code ,current_script_dir ,ElfFile = select_folder()#获取原始A2L文件,其中Head是要添加的头文件 # print(ElfFile) ElfFile = ElfFile.replace("/", "\\") ElfFile = ElfFile.replace("\\", "\\\\") ##################################################################### config_path = os.path.join(pathorigin, 'path_config.json') print(config_path) # config_path = config_path.replace('\\','\\\\') # 读取JSON文件并加载为字典 with open(config_path, 'r', encoding='utf-8') as f: pathdict = json.load(f) ElfFile = pathdict['elf_path'] ##################################################################### address_dict = get_variable_addresses(ElfFile)#从ELF里面提取出map,对于普通变量,构建变量名-地址的索引 for key,value in address_dict.items(): print(key) parseDwarfOutput(ElfFile,pathorigin)#生成编译文件dwarf list11,it_dict1,classes,arrayclasslist11,anydict = dwarfdo(os.path.join(A2LUpdata_fold, 'dwarf_info1.txt'))#找到了所有需要进行(少了一个数组) #处理dwarf生成结果 # for struct in list11:#遍历所有的结构体,这个list疑似出问题 # for structnum,value0 in struct.items(): # if('169abc4' == structnum):#结构体编号 # print('1')# # print(structnum) # for member in value0:#在这里寻找指定的成员 # # for i in i2.values(): # for key,value in member.items(): # print(key) # print(value) # 打印结果 #for var_name, address in address_dict.items(): # print(type(var_name)) # print(type(address)) # print(var_name) # print(address) # print(f"Variable: {var_name}, Address: 0x{address:x}") # print(address_dict['apa_AccrPedlArbn_FD_B']) #------------------------------------------------------------------------------------# #这里做一个操作,实现typedef正确识别 it_dict = resolve_dictionary(it_dict1) #------------------------------------------------------------------------------------# New_Code = Getaddressfromelf(Code,address_dict,classes)#普通的变量在这里更新地址 #0923类型 New_Code = Getaddressfromelf1227(New_Code,address_dict,classes)#普通的变量在这里更新地址 #1227类型 New_Code = Getaddressfromelfplus(New_Code,list11,it_dict,classes,arrayclasslist11,address_dict,anydict)#普通的结构体与普通的 #多维数组,在这里更新地址----0923类型的 New_Code = Getaddressfromelfplus1227(New_Code,list11,it_dict,classes,arrayclasslist11,address_dict,anydict) #多维数组,在这里更新地址----1227类型的 #3处,更新地址与偏移------------------------------------------------------------- offset_hex = "0x2180000"#偏移量 #New_Code = replace_header_with_a2ml(New_Code, Head)#这一步进行头文件的合并 # 调用函数并打印结果 #New_Code = process_string(New_Code, offset_hex)#更新好的地址,在这里进行偏移 #print(New_Code) # result = New_Code # ------------删除编译信息 # file_path = os.path.join(current_script_dir, 'dwarf_info1.txt') # if os.path.exists(file_path): # # 删除文件 # os.remove(file_path) # print(f"文件 {file_path} 已删除") # else: # print(f"文件 {file_path} 不存在") # ------------删除编译信息 New_Code = New_Code.replace('ECU_ADDRESS FE','ECU_ADDRESS 0xFE') # 获取当前脚本的目录 result = New_Code #current_script_dir = os.path.dirname(os.path.realpath(__file__)) # 构造目标文件的路径(与当前脚本同路径,文件名为 output.a2l) output_file_path = os.path.join(A2LUpdata_fold, 'Output_All.a2l') # 将字符串内容写入到目标文件中 with open(output_file_path, 'w', encoding='utf-8') as output_file: output_file.write(result) print(f"A2L content has been saved to {output_file_path}") 这段代码干了什么
09-18
Hugo_Symbol Entrez_Gene_Id aml_ohsu_2018_12-00023 aml_ohsu_2018_12-00051 aml_ohsu_2018_12-00066 aml_ohsu_2018_12-00150 aml_ohsu_2018_12-00211 aml_ohsu_2018_12-00258 aml_ohsu_2018_12-00294 aml_ohsu_2018_12-00372 aml_ohsu_2018_12-00423 aml_ohsu_2018_12-00426 aml_ohsu_2018_13-00007 aml_ohsu_2018_13-00028 aml_ohsu_2018_13-00034 aml_ohsu_2018_13-00098 aml_ohsu_2018_13-00118 aml_ohsu_2018_13-00123 aml_ohsu_2018_13-00145 aml_ohsu_2018_13-00146 aml_ohsu_2018_13-00147 aml_ohsu_2018_13-00149 aml_ohsu_2018_13-00150 aml_ohsu_2018_13-00157 aml_ohsu_2018_13-00160 aml_ohsu_2018_13-00163 aml_ohsu_2018_13-00165 aml_ohsu_2018_13-00166 aml_ohsu_2018_13-00186 aml_ohsu_2018_13-00195 aml_ohsu_2018_13-00202 aml_ohsu_2018_13-00204 aml_ohsu_2018_13-00226 aml_ohsu_2018_13-00232 aml_ohsu_2018_13-00245 aml_ohsu_2018_13-00250 aml_ohsu_2018_13-00253 aml_ohsu_2018_13-00255 aml_ohsu_2018_13-00260 aml_ohsu_2018_13-00262 aml_ohsu_2018_13-00266 aml_ohsu_2018_13-00270 aml_ohsu_2018_13-00281 aml_ohsu_2018_13-00331 aml_ohsu_2018_13-00338 aml_ohsu_2018_13-00342 aml_ohsu_2018_13-00353 aml_ohsu_2018_13-00354 aml_ohsu_2018_13-00365 aml_ohsu_2018_13-00384 aml_ohsu_2018_13-00393 aml_ohsu_2018_13-00396 aml_ohsu_2018_13-00406 aml_ohsu_2018_13-00409 aml_ohsu_2018_13-00420 aml_ohsu_2018_13-00425 aml_ohsu_2018_13-00450 aml_ohsu_2018_13-00454 aml_ohsu_2018_13-00466 aml_ohsu_2018_13-00468 aml_ohsu_2018_13-00487 aml_ohsu_2018_13-00493 aml_ohsu_2018_13-00496 aml_ohsu_2018_13-00500 aml_ohsu_2018_13-00513 aml_ohsu_2018_13-00515 aml_ohsu_2018_13-00522 aml_ohsu_2018_13-00532 aml_ohsu_2018_13-00544 aml_ohsu_2018_13-00545 aml_ohsu_2018_13-00546 aml_ohsu_2018_13-00551 aml_ohsu_2018_13-00552 aml_ohsu_2018_13-00557 aml_ohsu_2018_13-00558 aml_ohsu_2018_13-00563 aml_ohsu_2018_13-00572 aml_ohsu_2018_13-00573 aml_ohsu_2018_13-00578 aml_ohsu_2018_13-00581 aml_ohsu_2018_13-00593 aml_ohsu_2018_13-00601 aml_ohsu_2018_13-00602 aml_ohsu_2018_13-00615 aml_ohsu_2018_13-00619 aml_ohsu_2018_13-00625 aml_ohsu_2018_13-00650 aml_ohsu_2018_13-00655 aml_ohsu_2018_13-00658 aml_ohsu_2018_13-00659 aml_ohsu_2018_13-00660 aml_ohsu_2018_14-00001 aml_ohsu_2018_14-00012 aml_ohsu_2018_14-00015 aml_ohsu_2018_14-00021 aml_ohsu_2018_14-00023 aml_ohsu_2018_14-00026 aml_ohsu_2018_14-00034 aml_ohsu_2018_14-00041 aml_ohsu_2018_14-00044 aml_ohsu_2018_14-00045 aml_ohsu_2018_14-00053 aml_ohsu_2018_14-00060 aml_ohsu_2018_14-00061 aml_ohsu_2018_14-00063 aml_ohsu_2018_14-00064 aml_ohsu_2018_14-00078 aml_ohsu_2018_14-00081 aml_ohsu_2018_14-00083 aml_ohsu_2018_14-00092 aml_ohsu_2018_14-00096 aml_ohsu_2018_14-00113 aml_ohsu_2018_14-00125 aml_ohsu_2018_14-00126 aml_ohsu_2018_14-00127 aml_ohsu_2018_14-00135 aml_ohsu_2018_14-00141 aml_ohsu_2018_14-00152 aml_ohsu_2018_14-00175 aml_ohsu_2018_14-00184 aml_ohsu_2018_14-00193 aml_ohsu_2018_14-00228 aml_ohsu_2018_14-00231 aml_ohsu_2018_14-00259 aml_ohsu_2018_14-00279 aml_ohsu_2018_14-00289 aml_ohsu_2018_14-00331 aml_ohsu_2018_14-00355 aml_ohsu_2018_14-00359 aml_ohsu_2018_14-00376 aml_ohsu_2018_14-00380 aml_ohsu_2018_14-00423 aml_ohsu_2018_14-00425 aml_ohsu_2018_14-00434 aml_ohsu_2018_14-00447 aml_ohsu_2018_14-00448 aml_ohsu_2018_14-00454 aml_ohsu_2018_14-00458 aml_ohsu_2018_14-00464 aml_ohsu_2018_14-00473 aml_ohsu_2018_14-00476 aml_ohsu_2018_14-00488 aml_ohsu_2018_14-00495 aml_ohsu_2018_14-00496 aml_ohsu_2018_14-00504 aml_ohsu_2018_14-00514 aml_ohsu_2018_14-00528 aml_ohsu_2018_14-00542 aml_ohsu_2018_14-00546 aml_ohsu_2018_14-00559 aml_ohsu_2018_14-00564 aml_ohsu_2018_14-00567 aml_ohsu_2018_14-00578 aml_ohsu_2018_14-00581 aml_ohsu_2018_14-00588 aml_ohsu_2018_14-00597 aml_ohsu_2018_14-00599 aml_ohsu_2018_14-00602 aml_ohsu_2018_14-00608 aml_ohsu_2018_14-00613 aml_ohsu_2018_14-00618 aml_ohsu_2018_14-00632 aml_ohsu_2018_14-00643 aml_ohsu_2018_14-00658 aml_ohsu_2018_14-00667 aml_ohsu_2018_14-00670 aml_ohsu_2018_14-00672 aml_ohsu_2018_14-00676 aml_ohsu_2018_14-00681 aml_ohsu_2018_14-00690 aml_ohsu_2018_14-00712 aml_ohsu_2018_14-00714 aml_ohsu_2018_14-00725 aml_ohsu_2018_14-00730 aml_ohsu_2018_14-00735 aml_ohsu_2018_14-00739 aml_ohsu_2018_14-00742 aml_ohsu_2018_14-00757 aml_ohsu_2018_14-00761 aml_ohsu_2018_14-00774 aml_ohsu_2018_14-00780 aml_ohsu_2018_14-00781 aml_ohsu_2018_14-00787 aml_ohsu_2018_14-00798 aml_ohsu_2018_14-00815 aml_ohsu_2018_14-00817 aml_ohsu_2018_14-00831 aml_ohsu_2018_14-00832 aml_ohsu_2018_14-00901 aml_ohsu_2018_15-00014 aml_ohsu_2018_15-00018 aml_ohsu_2018_15-00024 aml_ohsu_2018_15-00029 aml_ohsu_2018_15-00043 aml_ohsu_2018_15-00045 aml_ohsu_2018_15-00051 aml_ohsu_2018_15-00057 aml_ohsu_2018_15-00073 aml_ohsu_2018_15-00075 aml_ohsu_2018_15-00081 aml_ohsu_2018_15-00084 aml_ohsu_2018_15-00123 aml_ohsu_2018_15-00140 aml_ohsu_2018_15-00147 aml_ohsu_2018_15-00169 aml_ohsu_2018_15-00171 aml_ohsu_2018_15-00175 aml_ohsu_2018_15-00194 aml_ohsu_2018_15-00201 aml_ohsu_2018_15-00229 aml_ohsu_2018_15-00231 aml_ohsu_2018_15-00237 aml_ohsu_2018_15-00246 aml_ohsu_2018_15-00248 aml_ohsu_2018_15-00261 aml_ohsu_2018_15-00269 aml_ohsu_2018_15-00275 aml_ohsu_2018_15-00276 aml_ohsu_2018_15-00279 aml_ohsu_2018_15-00287 aml_ohsu_2018_15-00296 aml_ohsu_2018_15-00300 aml_ohsu_2018_15-00302 aml_ohsu_2018_15-00303 aml_ohsu_2018_15-00312 aml_ohsu_2018_15-00320 aml_ohsu_2018_15-00331 aml_ohsu_2018_15-00338 aml_ohsu_2018_15-00351 aml_ohsu_2018_15-00353 aml_ohsu_2018_15-00371 aml_ohsu_2018_15-00377 aml_ohsu_2018_15-00383 aml_ohsu_2018_15-00395 aml_ohsu_2018_15-00417 aml_ohsu_2018_15-00464 aml_ohsu_2018_15-00470 aml_ohsu_2018_15-00471 aml_ohsu_2018_15-00479 aml_ohsu_2018_15-00482 aml_ohsu_2018_15-00491 aml_ohsu_2018_15-00525 aml_ohsu_2018_15-00534 aml_ohsu_2018_15-00539 aml_ohsu_2018_15-00556 aml_ohsu_2018_15-00559 aml_ohsu_2018_15-00563 aml_ohsu_2018_15-00572 aml_ohsu_2018_15-00578 aml_ohsu_2018_15-00593 aml_ohsu_2018_15-00595 aml_ohsu_2018_15-00608 aml_ohsu_2018_15-00610 aml_ohsu_2018_15-00614 aml_ohsu_2018_15-00615 aml_ohsu_2018_15-00616 aml_ohsu_2018_15-00626 aml_ohsu_2018_15-00633 aml_ohsu_2018_15-00650 aml_ohsu_2018_15-00653 aml_ohsu_2018_15-00670 aml_ohsu_2018_15-00674 aml_ohsu_2018_15-00680 aml_ohsu_2018_15-00683 aml_ohsu_2018_15-00688 aml_ohsu_2018_15-00692 aml_ohsu_2018_15-00693 aml_ohsu_2018_15-00701 aml_ohsu_2018_15-00702 aml_ohsu_2018_15-00717 aml_ohsu_2018_15-00724 aml_ohsu_2018_15-00734 aml_ohsu_2018_15-00755 aml_ohsu_2018_15-00756 aml_ohsu_2018_15-00763 aml_ohsu_2018_15-00766 aml_ohsu_2018_15-00767 aml_ohsu_2018_15-00777 aml_ohsu_2018_15-00778 aml_ohsu_2018_15-00782 aml_ohsu_2018_15-00786 aml_ohsu_2018_15-00807 aml_ohsu_2018_15-00811 aml_ohsu_2018_15-00813 aml_ohsu_2018_15-00819 aml_ohsu_2018_15-00821 aml_ohsu_2018_15-00829 aml_ohsu_2018_15-00837 aml_ohsu_2018_15-00839 aml_ohsu_2018_15-00850 aml_ohsu_2018_15-00855 aml_ohsu_2018_15-00858 aml_ohsu_2018_15-00864 aml_ohsu_2018_15-00870 aml_ohsu_2018_15-00872 aml_ohsu_2018_15-00874 aml_ohsu_2018_15-00883 aml_ohsu_2018_15-00892 aml_ohsu_2018_15-00900 aml_ohsu_2018_15-00903 aml_ohsu_2018_15-00909 aml_ohsu_2018_15-00912 aml_ohsu_2018_15-00921 aml_ohsu_2018_15-00929 aml_ohsu_2018_15-00936 aml_ohsu_2018_15-00939 aml_ohsu_2018_15-00961 aml_ohsu_2018_15-00965 aml_ohsu_2018_15-00967 aml_ohsu_2018_15-00974 aml_ohsu_2018_15-00975 aml_ohsu_2018_15-00976 aml_ohsu_2018_15-00979 aml_ohsu_2018_15-00981 aml_ohsu_2018_15-00990 aml_ohsu_2018_16-00001 aml_ohsu_2018_16-00003 aml_ohsu_2018_16-00004 aml_ohsu_2018_16-00007 aml_ohsu_2018_16-00010 aml_ohsu_2018_16-00027 aml_ohsu_2018_16-00031 aml_ohsu_2018_16-00048 aml_ohsu_2018_16-00050 aml_ohsu_2018_16-00056 aml_ohsu_2018_16-00067 aml_ohsu_2018_16-00073 aml_ohsu_2018_16-00075 aml_ohsu_2018_16-00077 aml_ohsu_2018_16-00078 aml_ohsu_2018_16-00087 aml_ohsu_2018_16-00088 aml_ohsu_2018_16-00094 aml_ohsu_2018_16-00102 aml_ohsu_2018_16-00109 aml_ohsu_2018_16-00113 aml_ohsu_2018_16-00115 aml_ohsu_2018_16-00118 aml_ohsu_2018_16-00120 aml_ohsu_2018_16-00124 aml_ohsu_2018_16-00129 aml_ohsu_2018_16-00132 aml_ohsu_2018_16-00139 aml_ohsu_2018_16-00143 aml_ohsu_2018_16-00145 aml_ohsu_2018_16-00150 aml_ohsu_2018_16-00151 aml_ohsu_2018_16-00157 aml_ohsu_2018_16-00217 aml_ohsu_2018_16-00220 aml_ohsu_2018_16-00226 aml_ohsu_2018_16-00249 aml_ohsu_2018_16-00264 aml_ohsu_2018_16-00269 aml_ohsu_2018_16-00271 aml_ohsu_2018_16-00273 aml_ohsu_2018_16-00278 aml_ohsu_2018_16-00289 aml_ohsu_2018_16-00292 aml_ohsu_2018_16-00303 aml_ohsu_2018_16-00307 aml_ohsu_2018_16-00315 aml_ohsu_2018_16-00316 aml_ohsu_2018_16-00332 aml_ohsu_2018_16-00339 aml_ohsu_2018_16-00344 aml_ohsu_2018_16-00351 aml_ohsu_2018_16-00354 aml_ohsu_2018_16-00356 aml_ohsu_2018_16-00358 aml_ohsu_2018_16-00373 aml_ohsu_2018_16-00392 aml_ohsu_2018_16-00406 aml_ohsu_2018_16-00410 aml_ohsu_2018_16-00459 aml_ohsu_2018_16-00460 aml_ohsu_2018_16-00465 aml_ohsu_2018_16-00474 aml_ohsu_2018_16-00479 aml_ohsu_2018_16-00481 aml_ohsu_2018_16-00483 aml_ohsu_2018_16-00491 aml_ohsu_2018_16-00494 aml_ohsu_2018_16-00498 aml_ohsu_2018_16-00504 aml_ohsu_2018_16-00510 aml_ohsu_2018_16-00519 aml_ohsu_2018_16-00525 aml_ohsu_2018_16-00538 aml_ohsu_2018_16-00540 aml_ohsu_2018_16-00547 aml_ohsu_2018_16-00548 aml_ohsu_2018_16-00566 aml_ohsu_2018_16-00627 aml_ohsu_2018_16-00699 aml_ohsu_2018_16-00702 aml_ohsu_2018_16-00705 aml_ohsu_2018_16-00708 aml_ohsu_2018_16-00710 aml_ohsu_2018_16-00724 aml_ohsu_2018_16-00731 aml_ohsu_2018_16-00733 aml_ohsu_2018_16-00755 aml_ohsu_2018_16-00766 aml_ohsu_2018_16-00770 aml_ohsu_2018_16-00771 aml_ohsu_2018_16-00810 aml_ohsu_2018_16-00815 aml_ohsu_2018_16-00818 aml_ohsu_2018_16-00820 aml_ohsu_2018_16-00822 aml_ohsu_2018_16-00831 aml_ohsu_2018_16-00836 aml_ohsu_2018_16-00846 aml_ohsu_2018_16-00867 aml_ohsu_2018_16-00875 aml_ohsu_2018_16-00882 aml_ohsu_2018_16-00951 aml_ohsu_2018_16-01004 aml_ohsu_2018_16-01005 aml_ohsu_2018_16-01010 aml_ohsu_2018_16-01017 aml_ohsu_2018_16-01047 aml_ohsu_2018_16-01049 aml_ohsu_2018_16-01061 aml_ohsu_2018_16-01080 aml_ohsu_2018_16-01082 aml_ohsu_2018_16-01093 aml_ohsu_2018_16-01094 aml_ohsu_2018_16-01097 aml_ohsu_2018_16-01100 aml_ohsu_2018_16-01102 aml_ohsu_2018_16-01103 aml_ohsu_2018_16-01109 aml_ohsu_2018_16-01121 aml_ohsu_2018_16-01127 aml_ohsu_2018_16-01138 aml_ohsu_2018_16-01151 aml_ohsu_2018_16-01185 aml_ohsu_2018_16-01191 aml_ohsu_2018_16-01192 aml_ohsu_2018_16-01201 aml_ohsu_2018_16-01210 aml_ohsu_2018_16-01216 aml_ohsu_2018_16-01219 aml_ohsu_2018_16-01223 aml_ohsu_2018_16-01225 aml_ohsu_2018_16-01227 aml_ohsu_2018_16-01237 aml_ohsu_2018_16-01254 aml_ohsu_2018_16-01262 aml_ohsu_2018_16-01270 aml_ohsu_2018_16-01272 TSPAN6 -1.8746 1.0494 -1.8746 0.5159 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.0098 -1.8746 0.0326 -1.8746 0.1494 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.2238 -1.8746 -1.8746 1.5228 -1.8746 -1.8746 -1.8746 -0.3329 -1.8746 -1.8746 -1.8746 -1.8746 0.6712 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 2.201 1.2793 -0.4556 -1.8746 -1.8746 1.3389 -1.8746 -1.8746 -1.8746 -1.8746 -0.2748 1.7658 -1.8746 1.2504 1.0036 -1.5973 0.5603 -1.8746 -1.8746 -0.0325 -0.1292 -1.8746 -1.8746 -1.8746 -1.8746 -1.2299 -1.8746 -1.8746 2.3296 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.5552 -1.8746 -1.8746 -1.8746 -0.0861 -1.8746 1.2445 -1.8746 0.289 -0.8564 -1.8746 -0.0625 -1.8746 -1.8746 -1.8746 -0.8484 -1.8746 -1.8746 -1.8746 -1.8746 0.186 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -0.6147 -1.8746 -0.2973 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.8187 -1.8746 -0.59 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.1811 -1.099 -1.8746 0.2879 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -0.6793 0.6676 -1.8746 0.0679 -0.566 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.4349 -0.2833 0.3343 -1.4175 -1.8746 -1.8746 -1.8746 -0.4124 -1.8746 -1.2713 -1.8746 -1.8746 -1.8746 -1.8746 1.7768 1.3906 -1.8746 -1.8746 -1.8746 -0.8758 -1.8746 -1.8746 -1.8746 -0.951 -1.8746 -1.8746 -1.8746 -1.4931 -1.8746 -1.8746 -1.8746 0.446 0.5218 -1.5719 -1.8746 -1.8746 1.2634 -1.8746 -1.8746 -1.1307 -1.8746 -1.8746 -1.5633 -0.115 -1.8746 -1.8746 -1.8746 -0.028 -1.8746 -1.8746 -0.5791 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.6775 -1.8746 -1.8746 0.1954 -0.3949 -1.8746 -1.8746 -1.8746 0.8995 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -0.1074 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.7326 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.0987 1.5594 -1.8746 -1.8746 -1.8746 -1.8746 -0.7052 -1.8746 -1.8746 -1.8746 1.5396 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -0.4025 -1.8746 -1.8746 0.8743 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -0.3164 -1.8746 -1.8746 -1.8746 -1.4369 -1.8746 -1.8746 0.4969 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.5633 -1.7001 -1.8746 -0.7499 -0.0266 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.9331 -1.7371 -1.8746 -1.8746 -1.8746 -1.8746 0.5246 -1.8746 -0.1863 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.9358 -1.8746 2.0899 -1.8746 -1.8746 0.2972 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.5279 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 0.3558 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 1.6769 -1.8746 -1.1278 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.7567 -0.484 1.2801 -1.8746 -1.8746 -1.8746 -0.1074 -1.8746 -1.8746 -1.8746 0.7656 -1.8746 -1.8746 -1.8746 -0.4181 -1.8746 -1.8746 -1.8746 -0.1324 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 -0.5008 -1.8746 -1.8746 -1.8746 0.2773 -1.8746 -0.8786 -1.8746 -1.8746 -1.8746 -1.8746 -1.8746 DPM1 -0.0904 -1.5772 -1.1837 -0.2003 -0.9848 0.4157 0.3343 -0.7053 -1.1454 -1.1856 -1.2924 -0.9163 1.3438 1.0951 -0.8473 -0.5869 0.0809 0.7854 1.0898 -0.5566 0.6573 0.0157 -0.172 0.3544 -0.4241 -0.051 -0.3574 -0.0884 0.276 1.1492 0.212 0.2581 -0.0115 0.1687 2.4007 -0.381 0.5566 -0.5641 -0.4784 -0.4822 0.8891 0.1492 -0.1739 0.1687 1.3778 0.7985 3.797 1.2313 -0.7473 1.1249 0.3678 0.3725 -0.2102 -0.9831 0.3071 0.9529 2.2236 0.1492 0.4223 0.8921 0.1773 0.9303 1.0462 0.0981 -0.0677 -1.6222 -1.173 0.0137 0.3343 -1.1022 -3.0792 -0.6402 -1.0027 -1.9378 1.2476 -0.6365 -2.4865 -0.7255 -0.513 0.4661 -1.3456 0.1066 -1.008 0.2361 -1.4198 0.289 -0.4572 0.0598 0.4613 -0.7685 0.8712 1.1406 -0.4998 -0.4554 -0.1656 -0.5206 1.8187 -1.4031 -3.1927 -2.2799 -0.6848 -0.7255 -2.4214 1.3044 1.2039 1.3352 0.7698 0.5424 -0.5829 -0.1498 0.4336 -0.513 1.9138 0.5073 -0.6721 1.1057 1.015 0.1492 0.7576 -0.1416 -0.8399 -0.3754 1.1769 1.6547 -0.1335 0.4705 -0.7183 1.0732 -1.5396 -0.2181 1.2696 1.6213 -0.4281 -0.2669 -0.2181 0.3953 -0.2304 1.7573 -0.0863 -1.7031 -1.8356 0.4819 0.134 -1.2409 1.0872 -0.0843 1.0488 -0.7741 1.361 0.608 -0.0658 0.0179 1.8221 -0.7943 0.9606 -0.1538 -0.0342 0.2646 -0.6795 0.3521 0.2361 -0.5791 0.938 -0.1335 -0.4724 0.3138 -0.818 -0.6365 1.3893 0.2495 0.8658 0.1795 1.395 -0.7128 -0.4436 -0.03 -0.9848 2.3897 0.1044 1.2643 0.37 0.8157 0.1106 1.6488 0.0875 -0.9631 -0.589 -0.5526 -1.325 -2.238 -2.1592 -1.0346 -1.0877 -1.2613 0.6339 -0.6703 -2.05 -0.5054 0.4841 -2.1861 -1.0327 -0.4862 0.1253 -1.9904 0.8256 0.234 2.3785 0.9555 -0.5416 -0.0923 -0.1151 -0.4418 -0.7309 -0.3163 -0.0963 0.491 -0.3281 -1.1385 -0.1822 -0.0197 -0.2181 -0.3378 0.938 0.0875 0.5471 0.9582 -0.3476 -0.049 -1.1679 -1.2409 -0.5526 -0.4063 0.4795 -0.0742 0.1044 -0.2748 -3.1866 -1.1713 -0.242 1.9435 -1.4401 0.1086 0.003 0.8687 -0.308 -0.1597 -0.0984 -0.4977 -0.7381 1.4475 0.3159 3.0851 1.2531 1.2643 0.3224 0.74 1.7607 -0.8689 -0.5622 0.8355 -0.107 1.5038 -1.1022 -0.6831 0.35 1.1548 1.0732 0.1903 1.7224 -0.4281 1.114 0.7957 0.7746 0.3835 1.1113 1.0982 -0.4804 1.5241 -0.6495 0.8406 0.2961 0.7722 0.9454 0.0472 0.4726 -1.0186 -0.1151 -0.4281 0.0553 -1.7686 0.1171 -0.9324 0.2276 0.9146 0.0598 0.9121 -0.03 -0.17 -0.7417 1.7733 1.9869 -0.0963 0.6291 -0.5168 -0.2606 0.1753 -0.2243 0.0598 2.0965 0.3747 0.5282 -0.1943 1.2368 0.9683 0.1555 0.2404 -0.4143 -0.1498 -1.2736 -2.4308 0.1044 -0.0963 0.026 -1.6371 -0.3201 1.041 -1.3694 -0.5719 -0.0258 -0.5966 0.9582 0.4473 0.4841 -0.8803 -1.0418 0.9788 1.3208 -1.6852 0.1406 0.9995 1.7733 0.9633 -0.2003 -0.513 0.003 0.1171 0.4591 -0.3773 0.3455 1.0049 0.4269 -1.2648 -0.5453 -1.1437 -1.1489 0.3747 1.0898 -1.1977 0.6671 0.2034 1.1032 -2.1184 -0.0904 -0.5755 -0.9234 -0.8016 0.1773 0.5376 0.4954 -2.9198 -0.4646 0.3544 0.7671 0.3246 0.8382 -0.5244 0.0598 0.1687 0.4591 1.0074 0.4841 1.7768 0.2581 0.4567 -2.7599 -0.3986 -0.5187 -0.6158 -0.9271 0.8157 -0.1435 -1.472 -0.7053 -1.6321 -0.0279 0.3246 0.4544 -2.1544 -0.0638 0.1002 0.3906 1.7003 -0.7274 -1.2221 -0.862 -0.9091 -1.5641 -0.9431 0.1406 0.026 -0.9414 0.7907 0.3769 0.2939 0.0344 -1.7621 0.5143 0.0918 0.1596 1.4742 0.1816 0.8282 -0.9613 1.9467 0.6815 -0.9431 1.2755 -0.4455 0.6291 -1.2477 -0.001 -0.4083 0.3363 0.5775 -0.0322 0.0281 0.3835 -0.6533 0.0639 0.7746 0.1471 0.9097 -0.0943 0.7957 0.8208 -1.3658 1.9501 -0.105 1.3044 -2.2127 -0.8914 SCYL3 0.1215 0.4126 -1.0175 0.2267 1.2799 0.0253 1.2584 0.8067 -0.2553 1.3496 -0.1501 0.3309 0.7999 -0.363 0.0129 0.1964 0.889 -1.0044 0.4955 0.3014 0.2898 1.288 -1.5249 -0.7144 1.0515 1.2271 -0.0399 -0.2107 0.6422 -0.7075 -0.2391 0.2599 0.5481 0.4126 -0.0103 0.538 -0.0167 0.3459 0.129 -0.6655 0.0738 0.4603 -2.3067 -0.5104 0.4209 -1.0458 0.161 -0.2708 -0.3685 -0.4416 0.1678 0.0954 -0.3603 -0.0191 1.0076 -0.4654 0.8969 0.1207 0.1282 -1.0861 -1.6746 -0.5929 -0.188 -0.4644 0.5547 1.3097 0.0253 -0.9133 -1.434 -2.0797 0.2695 -0.767 -0.4179 -0.2683 -0.7471 0.8153 0.7107 -0.3196 -1.5685 -0.2855 -0.4607 -0.3954 -0.1268 -2.0216 0.71 0.5105 0.9812 -0.3452 0.3409 0.3622 -0.8606 1.0694 0.5599 0.4167 -0.6023 0.1889 -1.5612 0.3 2.6711 0.5179 -0.0279 -1.269 0.1038 -2.7883 0.365 -0.7481 -1.0764 0.1178 1.4404 0.863 0.2142 0.045 0.892 -0.086 0.8165 0.4746 0.3798 -0.1939 -2.8472 0.8878 0.0253 0.2237 -2.7934 -0.2759 0.9297 -1.5562 0.1859 -0.2366 0.2913 -1.2427 -0.5585 -0.3187 -0.3505 0.5963 0.2008 0.2871 1.1088 0.7176 -0.0039 0.6487 0.5266 1.7115 -0.3407 1.0619 1.1803 -0.0391 -0.339 0.0513 0.3663 1.8347 -0.0803 -0.6013 -0.5234 2.0332 0.1934 -0.6946 -0.8245 -0.3892 -0.4654 -0.0342 0.0528 0.913 -0.1252 -2.3799 0.5612 -1.4289 1.1286 0.3351 -0.8094 -0.4735 -1.3758 0.0033 -0.381 1.3882 -2.0997 0.6665 0.0707 -0.1585 0.1267 0.203 0.6583 0.2252 -1.4774 1.3947 -1.3213 -0.1693 0.6422 0.8848 -0.0248 0.063 -0.4051 -1.3224 -2.4653 1.2711 -0.8245 -0.504 -0.6187 0.9535 0.6122 -1.835 -1.2886 1.1871 -3.2269 -0.417 0.7382 1.1815 0.3106 -0.9529 1.2105 0.1934 -3.2343 -2.1922 0.3494 -1.5188 -1.5261 0.1949 0.618 1.1792 -0.0358 -2.4282 0.1836 -0.0642 -2.8526 -2.1199 -2.1012 0.767 0.5917 -1.8658 -0.8173 0.4319 -1.8364 1.0711 0.6494 0.0962 -0.3667 0.4589 -0.3621 0.9297 0.5166 -0.0771 -1.6799 1.5114 0.0785 0.7376 0.4297 0.226 0.2171 0.5779 -0.4135 -0.0836 -0.6334 -0.5446 -0.0448 0.6787 0.9818 0.7489 0.3636 0.7615 1.3103 0.3741 -0.1965 -1.3545 0.0723 0.2949 0.4444 -0.1032 -1.1357 0.4691 0.1588 0.6219 1.2038 -0.0079 1.0642 -2.03 -0.2152 0.6049 0.9297 -0.0909 -0.2056 0.8208 1.2673 0.2993 -0.5311 0.6291 -0.7164 0.0645 0.6049 -2.1863 2.1282 1.3027 1.2121 0.4395 0.3699 1.319 1.3641 0.5413 0.5233 1.2596 0.7708 -2.8106 0.9326 0.7107 0.8497 1.1556 -0.9634 1.392 1.2755 2.3704 -0.1669 0.2964 -0.0578 0.9558 0.2222 0.0637 1.4562 1.4736 0.0339 0.1496 0.0269 0.7271 0.3959 1.1077 0.0785 -0.0039 0.1178 -1.4499 0.7313 -0.6887 1.1309 -0.417 -0.3765 0.3244 0.9894 -0.3338 0.4833 -0.3505 -0.0407 0.6128 -2.618 -0.4425 -1.2851 -0.4278 -2.6887 -2.3337 -3.0122 0.2827 -0.2039 1.2364 0.3657 -2.1516 1.3022 0.2207 -0.6916 0.7887 -0.1998 0.8356 0.3417 -0.0755 -3.2152 0.9488 -3.2656 -1.1482 0.0946 0.6474 0.3615 0.5752 -0.4506 -2.0868 0.0715 0.1542 0.7832 -0.3576 0.3417 0.2436 0.4147 -0.1308 0.5273 0.7407 -0.6808 1.2409 -0.0788 -0.502 -1.6786 0.3805 0.6239 0.4854 -1.4653 0.9142 0.5159 0.5759 1.0985 -0.4956 0.8319 -0.2519 0.7726 -0.6187 -0.023 0.9136 0.7277 1.1409 0.4276 -1.0087 0.2149 -0.5891 0.0761 0.3678 0.9148 0.8593 -0.1409 1.0746 0.0293 -0.2332 -0.2828 -0.835 0.3466 0.5837 -0.9294 -1.4277 1.3367 -0.8908 -0.5104 -0.1276 0.9836 0.2097 0.7196 -1.3344 0.0869 0.1648 -2.3507 -1.2243 0.8509 -0.7174 1.9173 0.6807 1.4873 1.0082 0.7239 0.9434 1.3625 0.5692 0.9357 -0.2469 0.2149 0.4216 -0.1787 1.2425 -1.1369 0.5639 -0.0248 0.1115 -0.9634 C1orf112 -0.7292 -1.7594 0.6214 0.5747 0.1028 0.0751 0.763 -0.548 0.1416 -0.6225 1.1274 0.4114 0.2715 1.6723 -0.237 0.4208 -0.8779 0.6742 -0.1928 1.6285 0.5996 -0.7941 1.0545 1.1305 0.2715 -0.927 0.1004 -0.3504 0.08 -0.3775 0.4035 0.4789 0.4989 -1.7106 -1.3603 -0.3223 1.6938 -2.5384 -0.2955 0.2033 -0.5776 -0.1855 -2.9335 0.2376 0.3683 -1.5759 -2.5336 -1.2651 1.0159 -0.3099 0.2368 0.6359 -0.7585 -0.7871 -0.9726 -4.9311 -2.3872 -0.1716 0.6935 -2.6247 -0.3185 0.3799 1.26 -1.6047 0.7474 -0.7123 0.0376 1.2679 1.2309 2.268 1.4663 0.6526 1.3149 2.0206 1.2575 -0.2038 -0.3872 0.4914 0.3056 0.5135 0.7063 0.6075 -0.927 -0.1827 0.5163 1.1687 -0.1672 0.1969 -0.4198 0.9798 -0.2333 0.3261 -0.3108 -0.7847 -0.7494 0.6626 -1.0718 0.1543 1.0291 -0.3347 0.0376 0.6207 -0.9887 0.9629 1.4716 0.8742 1.4632 0.009 0.4021 -0.1169 0.7617 1.2397 0.7966 0.4236 -0.4089 0.8444 -0.4612 1.1948 -1.1971 0.0986 0.7461 0.4989 0.0367 1.6007 -0.0456 -0.9355 0.5247 1.5718 -0.1081 -1.6177 -0.0473 -0.5615 1.5204 -0.4368 -0.3434 0.566 -1.1929 0.5301 1.5599 -0.3834 -2.3188 -1.5566 -0.7247 -1.6145 -0.8222 -1.1971 0.9103 -0.3533 0.5875 -0.2877 0.9469 -1.6357 -1.1985 -0.0207 -0.2604 0.2927 -0.5419 -0.7359 -0.4632 0.6559 1.7482 0.6385 0.9355 -1.6906 1.3302 0.2073 -0.6043 1.0067 1.621 -1.4459 -0.14 -0.9527 0.1939 -0.1991 0.4907 0.931 0.2546 0.5587 0.2159 1.1342 1.2383 0.6795 0.8396 2.2223 -0.6064 -0.5439 0.1496 1.3386 -1.2233 -0.3651 1.0713 1.5466 0.5647 1.2094 -1.4338 -0.1276 0.8131 0.8783 1.1367 0.0882 0.9464 0.9809 0.026 0.1962 -0.1151 -0.8388 -0.4246 0.2569 0.5553 0.2837 0.6366 0.62 0.0227 -0.5893 -2.0905 0.7918 -0.1526 0.4817 0.5335 0.7499 0.5594 -0.5187 1.583 0.204 -1.9866 0.3169 0.6462 -0.9441 1.4287 0.9287 0.0995 -0.0508 -1.9655 1.1248 0.0995 0.8052 0.618 0.3881 -0.7303 1.0318 1.0062 -0.8222 -0.0378 -2.2674 0.6227 -0.0448 0.1774 1.0399 0.5666 -2.9231 -0.9862 0.4646 1.9721 0.3574 -2.1675 0.3999 1.6739 -1.6471 0.1828 -1.4906 0.3777 -2.524 0.4933 0.6619 -0.178 0.3683 -1.3645 0.0971 0.1361 -0.1617 -0.3533 -0.0605 1.0464 -0.9355 -2.2674 0.3999 0.6345 -1.2777 -0.2483 1.8593 -1.81 -0.7563 0.4717 -1.0809 -2.6886 0.3208 -0.5335 -0.1436 0.0285 -0.6054 -0.5176 -0.5776 0.9522 -0.1855 -1.3702 -0.1798 -1.2735 0.6513 0.824 -0.1195 -0.6327 0.7004 -1.2592 -2.1513 0.7004 0.338 -0.3707 -0.4958 -0.5032 0.0443 -0.2936 0.1836 -0.253 0.782 0.1157 -0.8766 -0.7801 1.0062 0.43 -0.1151 1.4955 -0.2212 0.6339 0.106 -0.0867 1.1243 0.106 -0.0858 -0.1072 0.1076 0.6287 0.5754 0.968 0.8723 1.2482 0.1781 0.0235 -0.6926 -0.6347 -0.1232 -1.4521 2.0731 1.5117 0.6702 0.1536 1.7603 0.3632 1.3335 -0.0011 0.5465 -0.4663 -0.1734 -0.2352 -0.3375 -0.4307 0.4646 0.5694 0.2025 -0.5231 0.0792 0.8413 1.1117 0.6494 0.2081 0.6009 1.2339 0.7045 -0.3688 0.204 0.6802 0.2875 -0.5346 -0.4452 0.0602 -0.2092 0.8348 -0.0716 -0.4898 -2.2196 -0.6737 0.9016 -0.0946 -0.5367 -0.2973 1.258 1.2629 -1.9376 -0.1982 -1.0217 -0.4562 -2.1246 0.0784 0.3742 0.5391 -0.8647 -2.1633 -1.5013 -0.1864 0.1196 0.1677 1.2526 -2.2801 -1.073 -2.1287 0.5087 0.0031 0.344 -1.3099 -1.9396 -1.4293 0.1133 0.2152 0.774 -0.6571 -0.5187 0.9379 -0.9478 0.5889 -0.9147 -0.6108 0.3153 -1.2845 0.0184 0.2199 0.298 0.6834 -1.7612 1.732 -2.8958 0.863 -0.2849 0.5045 -0.8128 0.5727 1.6614 0.6134 0.3785 0.9527 -0.1617 -0.092 -0.6507 -1.0524 1.0067 -0.5893 0.4475 0.3969 -0.3979 0.2853 0.0979 -0.359 0.5868 FGR 1.0199 -1.7611 1.0228 -1.1137 -0.3199 1.1819 0.4271 0.0643 0.1444 -0.812 -2.0776 -0.7958 0.8097 -2.4541 0.2284 1.1895 -0.6513 -3.1127 -0.2061 -0.7746 0.1386 0.5468 0.7509 0.6773 -0.495 -1.102 0.8141 1.0559 0.9941 -1.2504 -0.7554 0.4822 0.8622 0.9036 0.4025 1.1208 -1.1816 -0.7815 1.0778 0.581 -0.733 -1.3118 0.1531 -0.9448 0.757 -0.1858 -1.1824 0.383 0.207 0.9172 1.0228 1.0228 1.059 0.3228 -0.728 -0.0594 0.3764 0.9324 0.8733 -0.66 0.2527 -0.8194 0.1357 0.8522 0.596 -1.1816 -0.0101 -0.4717 -1.0321 0.9533 0.725 0.4734 0.8053 0.6553 -0.8357 1.2293 0.4852 -0.2646 -0.2889 0.4646 0.9172 -0.3266 -1.0771 -0.1682 -1.8647 0.9072 0.3506 0.8499 0.8163 -2.6996 0.6848 0.6885 0.6979 1.0141 -0.3573 -1.0699 0.4793 -0.8823 -1.4353 0.5124 0.9047 0.0194 0.3418 0.16 -1.9519 0.3244 -0.3974 0.8119 0.3936 1.1208 0.2383 0.8949 -0.6458 0.8685 -1.8564 -0.1144 0.6304 -0.1895 0.6269 0.7018 0.6339 1.2211 0.5357 -0.2561 -0.1393 0.7967 0.8163 0.784 0.8876 0.4044 -2.7322 -0.3979 0.1512 -0.6362 -0.6827 0.6848 -0.1858 0.5977 0.1396 -2.3529 0.0053 0.7468 -0.6955 0.1903 -0.026 -1.8636 -2.2898 0.6681 1.114 0.0301 -0.8565 0.5373 -0.0163 1.3043 -0.1196 -1.3436 0.9072 -0.2129 -0.4788 0.4676 -0.0846 -0.9747 0.6375 0.044 0.311 -0.6952 -2.2009 0.7408 1.0652 -2.5686 -1.0208 -3.2196 -1.3134 0.4389 0.613 0.4545 0.9072 -1.8988 -0.1628 0.9147 -1.0342 1.0467 -0.4433 0.7516 -1.9889 0.8318 -1.7472 -0.8348 1.0778 0.2883 0.7967 1.0907 0.5776 -1.5245 0.5893 -0.7486 -0.8559 1.1596 0.9122 -0.3165 0.8592 -2.6814 -0.0334 -0.4185 -0.2477 -2.0364 -0.2299 -3.9153 1.1006 -0.461 -1.8044 -0.551 0.4057 0.163 0.6375 0.8141 1.2766 -0.8206 0.3544 0.4208 -0.4658 0.8709 -0.8505 -0.5265 0.6234 0.1338 0.0014 -0.0933 0.1531 -0.291 0.3268 0.9172 -0.1646 -0.3165 -3.4555 -0.18 0.0252 -0.1975 1.0652 -0.0637 0.4897 0.9506 -0.3578 0.0601 0.4153 -0.3333 0.5678 -0.1208 -1.5248 -0.6037 0.3122 -2.6924 0.5727 0.2764 -0.4327 1.1669 0.801 -0.3256 -3.4087 0.8207 0.7428 -0.0716 0.213 -2.7281 0.8852 0.5793 0.1338 1.1819 -0.3758 0.9299 -0.3087 0.172 -2.3345 0.6923 0.3122 1.3335 0.7172 -1.8497 -0.8596 1.0287 0.3158 0.3061 0.659 1.0778 0.6225 0.0115 1.1706 0.1367 0.801 0.3712 0.8053 1.0875 0.6942 -0.8363 -0.3353 1.2546 0.9802 0.5859 -0.1262 -0.1789 0.9273 1.1596 0.4793 -0.928 1.0083 -0.4522 -0.1591 -0.9984 0.1234 0.9022 0.6699 -0.3121 1.0112 -0.0101 0.6392 0.0895 0.0432 0.5826 -1.3304 -0.8607 0.972 0.8828 -1.4726 1.2857 0.2143 0.4333 0.4912 0.8569 -1.0558 -1.2466 0.0609 -1.0251 -0.7764 0.9022 1.2677 0.3253 -2.7095 -0.5617 0.6961 0.2978 1.2857 0.2883 -0.0025 -0.6255 -2.1041 0.0861 1.059 -0.9319 0.7428 0.5843 -1.5644 -0.4473 -0.1817 0.5977 -0.6792 -0.8547 -0.6942 1.0317 -0.8925 -0.966 -0.1963 0.8546 0.8787 0.366 0.235 0.2145 1.2546 -0.3256 1.1006 -0.9981 0.6096 -4 -0.7964 0.403 0.9147 0.1965 1.4209 0.4927 -0.3146 1.2677 1.0683 -2.0579 0.4044 -0.1839 -1.693 0.0268 1.0907 -0.0467 1.1781 1.1416 0.174 1.156 0.2919 1.1208 -0.5528 -0.1823 0.6718 0.6893 0.9559 1.2211 1.2051 -0.5913 0.0574 0.7989 0.6681 1.1819 0.0045 -0.1941 0.8185 -0.1033 1.1452 0.7269 -1.284 0.5248 0.3281 -0.3727 -0.0798 0.8032 0.1986 0.8477 -1.6315 0.6234 -0.8723 0.3405 0.446 0.0694 0.7018 -1.0962 0.5093 0.6961 -0.5139 -0.7572 -1.307 0.9586 0.021 -0.2609 0.0359 1.2954 1.2252 0.2942 0.8273 0.8477 -1.8653 -0.9368 -2.2851 -1.2422 -0.5535 1.2766 -1.0459 -0.8346 0.6979 CFH -0.1486 -0.7749 0.0555 0.4628 -0.9579 1.0974 -1.1861 1.5938 -1.9962 -0.927 0.7252 -1.4716 -0.4516 -1.4693 -0.2294 0.9029 -1.9962 0.8482 1.1133 -0.002 -0.3826 -1.9962 0.8266 -1.2347 1.4523 0.0023 -1.3405 -1.9962 -1.9962 1.6293 0.5534 -1.9962 1.3246 0.9525 1.4173 -0.1219 -0.6478 1.0484 -1.9962 -1.9962 2.0985 -1.0941 -1.0976 -0.3204 -1.9962 -1.2629 0.7331 0.3556 0.8053 0.6521 1.1015 1.0957 -1.5737 -1.9962 0.1453 -1.9962 -0.3903 -0.2162 -1.9962 1.1471 -1.9962 -1.9962 -1.9962 0.5136 1.0261 1.4619 0.3781 -0.9081 -1.9962 -1.9962 -1.9962 -0.8378 0.9131 0.6779 0.606 -0.2556 1.4151 1.325 0.661 0.2424 0.1922 -1.9962 0.7601 -0.232 1.5869 -1.9962 -0.709 0.6394 -1.9962 1.2226 0.5679 -0.5966 -1.9962 0.3935 0.8652 -0.2549 0.8598 -0.7626 1.8966 -1.6992 -0.3021 -1.9962 -0.372 -0.8263 -1.1327 0.1094 -1.7478 -0.2246 -1.9962 -1.427 -1.9962 1.4188 -0.9534 -0.7552 -0.7124 0.6755 0.0093 -1.9962 -1.9962 -1.9962 -1.427 -1.9962 -1.3473 0.6927 -1.6179 -1.9962 -1.9962 -1.343 0.2568 -1.9962 1.892 -1.9962 -1.9962 -1.6122 0.2636 -0.7663 -1.9962 -0.5108 1.5464 1.4721 0.7915 -0.9779 -0.2609 -1.9962 -1.9962 0.9044 1.2115 -0.6883 -1.9962 -1.9962 0.2693 0.9722 -0.653 -0.3989 -1.1062 -0.8925 -0.9763 -1.9962 0.5027 -1.9962 0.2796 1.3566 -1.9962 0.172 1.0252 -0.193 -1.9962 -0.6339 -1.9962 -1.0755 0.1829 -1.9962 1.5741 -1.9962 0.4612 -1.9815 -1.9962 -1.9962 -1.6963 -0.2986 -1.277 -1.9962 0.4284 -0.5778 -1.9704 0.518 -1.9962 -1.7234 -0.654 -1.9962 -1.9962 -0.9168 -1.9962 -1.9962 -1.9962 -1.9962 0.5852 -0.5749 0.6882 0.7295 -0.7011 -0.075 0.2835 -0.1453 -1.5652 -0.7044 0.6841 1.3522 1.2541 0.3489 0.8888 -1.1825 -0.222 -1.3273 0.1821 -1.9962 -1.2487 -1.0704 -0.8482 0.3026 -0.2741 -0.4308 0.8592 1.3369 -1.9962 0.8367 -0.1319 0.4012 -0.111 -1.9962 0.2997 -1.8671 -0.2168 0.4517 0.4417 -0.3934 -1.9962 -1.9962 0.374 0.6346 0.0102 -0.9198 0.8285 -1.9962 -1.5846 -1.2229 -1.9962 1.3498 0.804 -1.9962 -0.9763 -1.9962 -0.9977 -0.5444 -1.9962 -1.9962 -1.9962 -1.9962 0.7096 -1.9962 -0.6508 -1.9962 -1.5706 -0.7113 -1.7722 -1.9962 -1.9962 -1.0654 -1.604 -1.7109 1.3383 -1.2309 1.2776 0.9826 -1.601 -1.9962 0.3696 -0.996 -1.9962 -1.9962 1.1298 -1.9962 -1.9962 0.069 0.1434 -1.9962 -1.9962 -1.9962 -0.1648 1.3877 0.0599 -1.2268 0.265 -1.9962 1.4561 -1.9962 -1.9962 -1.9962 0.756 -1.9962 0.3757 -0.7407 1.2986 -1.791 -1.9962 -1.5419 -0.0191 0.8419 0.1304 -1.9962 1.3285 -1.2014 0.5501 -1.9962 0.266 -1.2347 0.467 -0.655 1.8025 1.5245 -1.9962 0.1738 -1.9962 -0.4123 -1.9962 0.9508 0.6207 -1.3963 0.4085 0.0301 -1.16 -1.9962 1.101 0.0328 -0.9548 -1.9962 1.2015 1.5 -1.9962 0.9823 -0.1397 -1.9962 0.3975 0.5588 1.1652 -1.9962 -1.9962 -1.9962 -1.9962 -1.9962 1.6007 -1.8436 -0.8353 -1.7972 0.6173 1.4812 1.2336 -0.117 0.6847 -1.7109 0.892 0.6868 -1.108 -1.9962 -1.0839 -0.2616 -0.6726 -1.9962 -0.339 1.7459 -0.3949 -1.9962 0.3195 -1.9962 -0.7215 -1.9962 1.5514 -1.9962 -0.1115 1.3041 -1.9962 1.6799 -0.88 0.0352 -1.0621 -0.6295 0.5537 1.4956 0.1698 -0.1397 0.881 -1.9962 -1.9962 -1.2958 -1.9962 -1.9962 -0.2924 -0.5108 -0.3441 -0.6244 -1.2347 -0.1018 -1.9962 -1.9962 -1.108 -0.8263 0.5437 -0.4592 -0.2258 -1.0455 0.1256 -1.4836 1.3082 -0.2162 -1.8333 -0.8981 -1.9962 -1.9962 1.481 -0.4275 1.3892 -1.9962 1.6327 1.3186 -0.4722 -1.9962 0.7323 -0.652 1.3866 -1.9962 1.468 -1.9962 2.0402 -0.7432 -0.7421 -1.4526 1.2077 -1.9962 -1.3189 -1.9962 -0.4834 -0.0713 0.512 -1.9962 1.4681 0.0445 -1.9962 -1.9226 0.9818 -1.9962 -0.5153 FUCA2 0.7643 -0.5081 0.2409 1.2145 0.609 -0.5201 -0.4351 -0.3399 -1.6104 0.2673 -0.0094 -0.028 1.5497 0.2117 0.346 1.0666 -0.9775 0.402 0.3661 0.1233 -0.4669 0.5791 -0.2933 0.8241 -0.045 -1.8148 -1.2073 0.5277 1.1166 -0.3999 0.3466 0.43 0.383 -1.2095 1.0133 0.6748 0.1435 0.0785 -1.4509 0.7957 -0.3405 0.5917 0.6434 0.0762 0.802 -0.0269 -3.5306 -0.1905 -1.7597 0.6767 1.1411 1.3174 -0.2027 1.4106 -0.0274 -0.2122 -3.2361 0.5568 0.6969 0.0773 0.6687 -3.1563 1.0475 -0.3808 -0.1734 0.5101 0.1701 -1.0621 -1.2413 0.7324 0.0192 0.5403 0.6648 0.6167 -0.0314 0.7177 0.8549 1.0643 0.2834 0.1581 1.043 -0.2495 0.5252 0.1736 0.4708 1.7756 0.1615 0.8123 -1.4872 -0.1464 1.7038 0.815 0.1546 1.443 -0.0042 -0.1821 -0.2901 0.4271 0.2798 0.3226 -0.6353 -0.8421 0.0899 0.0974 -0.6871 0.0664 0.402 0.0705 0.1389 0.2454 0.2496 1.7072 -0.3934 0.0739 -0.3522 0.4926 -1.8748 -0.2806 -0.1306 0.5937 1.3864 1.1356 0.8276 0.6727 0.8867 0.68 1.4135 -0.3415 -0.1345 0.5791 -0.5985 0.9843 1.2112 -1.3224 0.7338 0.1603 0.1116 -0.0377 0.5014 -1.5577 -1.9546 -2.6395 0.6878 -0.8421 0.1475 0.246 0.6033 0.6174 0.4436 0.4069 0.143 -0.0202 -0.8503 -0.1103 -0.895 0.857 0.0417 -0.236 -0.2556 0.767 -0.0794 -0.2718 -0.5537 -0.2689 -0.4253 -0.648 -3.3065 0.9761 -0.4132 0.609 0.4082 0.2603 0.1909 0.6343 0.389 1.1001 -0.2795 -1.5537 -0.3017 0.8577 -0.2178 1.0666 0.3691 1.4807 0.0009 -0.1816 -1.8696 0.6218 0.8262 1.0814 0.4107 0.8515 1.2466 -1.7042 -0.5444 -1.8714 -1.9611 -0.1509 -0.616 1.0751 0.6205 -0.6429 0.4902 -3.0103 -0.6762 -1.8512 -2.657 -0.1098 0.1741 0.3197 0.3024 0.8312 0.0508 0.205 0.3143 0.5733 1.5003 0.0291 0.7751 1.4307 0.3955 0.707 -0.2523 0.5696 1.2947 -0.1436 -1.1843 0.7629 0.3806 0.2315 0.8577 -0.1211 0.4155 -2.1465 -0.225 0.249 1.3974 0.7629 0.165 1.2868 1.1676 -0.8737 0.334 -2.3459 0.448 -2.9217 0.1644 0.5975 -1.7878 -2.5973 0.4412 -0.9705 0.3018 0.3739 -2.4726 1.62 -0.3165 0.3006 -0.9524 0.1424 1.0636 -0.6887 -1.0828 -0.4021 1.0059 0.3412 0.5221 1.4993 0.4517 0.8781 0.222 0.4051 -0.2523 0.6284 -1.2019 -1.2335 -1.3666 -1.625 0.5993 0.3613 -0.0805 0.0429 0.5772 -0.1125 0.362 -0.1013 -0.4564 1.2054 0.0496 -0.746 -1.0758 0.4227 1.1651 -2.1008 0.1361 1.2955 0.7999 0.04 -0.1372 0.9162 -1.2215 -0.2211 0.1082 -3.2869 -0.4362 0.1684 0.1922 -0.3149 0.0893 -0.3138 0.6904 0.1695 1.3753 0.9248 0.553 -0.5744 -0.6176 0.2841 0.4567 0.3984 0.4113 -0.9442 -0.305 0.1713 0.529 -0.4889 0.2614 1.228 0.4708 0.7197 -0.5711 -0.3736 0.5841 0.6362 -0.3703 0.4666 0.4555 0.3137 1.3104 -0.9175 -1.2645 0.6536 0.1701 0.0773 -0.1865 0.6265 -0.3923 0.4368 -0.4756 -0.3149 -1.1486 0.802 0.6755 -0.2984 0.6839 -0.2444 0.2798 1.0514 -0.0252 -2.1309 -0.7679 0.6963 -0.8252 0.1192 0.3679 -0.1425 0.461 -0.4104 -0.0077 0.4964 -0.2417 0.4026 -0.0473 -0.377 0.4265 1.1096 -0.1498 -0.0439 -1.1816 0.9125 1.0938 -0.5629 0.0733 -0.8231 0.0659 -2.09 0.8639 0.5345 0.7151 0.4844 -0.1695 0.9048 -4.7365 -1.135 -7.328 -0.2955 -0.3372 -1.2519 -0.258 0.4381 -0.2417 1.4846 -1.1394 -0.1481 1.0467 0.5746 -0.3138 -0.3366 -0.7663 -0.8405 0.9998 -1.0362 0.6265 0.1424 1.0162 0.6793 0.8269 -0.4384 -0.3845 1.6601 0.4678 -0.7008 0.7391 0.9105 -1.1904 0.8817 -0.5037 -0.3328 1.3032 0.6058 0.0797 0.0291 -0.564 0.5765 -2.4062 0.5904 0.2056 0.2442 0.303 -1.2859 0.0613 0.3179 -0.1295 -0.4911 -0.4384 0.2402 -1.302 0.0382 0.3036 0.5169 0.8054 GCLC -0.4555 -0.1834 0.2483 -0.0333 0.6454 0.1198 0.0509 0.3119 1.9649 0.4223 1.0703 1.1248 -0.0315 0.6398 0.1962 0.2309 0.1501 -0.7334 -2.1865 1.7622 -0.5887 0.6039 0.707 0.5448 0.2699 -0.3026 1.2632 0.4816 -0.1104 -0.1766 -1.7241 0.3032 -1.5107 0.9954 0.4713 0.2138 -0.6927 0.4936 -0.0637 0.3361 0.0156 -0.2206 0.6216 1.6156 1.086 0.5846 -0.3114 0.0741 1.9416 -0.0546 0.7082 0.3919 1.0664 1.6189 1.3173 -0.7206 -0.2881 -0.8117 -0.1421 0.1814 -0.1409 -1.5979 0.6085 -0.4951 -0.7396 -0.5775 -1.0987 -0.5502 -0.1293 -0.0843 -0.3417 -0.899 -0.0218 0.7595 2.9264 0.0913 0.328 0.9071 -0.4918 0.5564 0.5688 0.0919 0.2338 -2.2991 -1.2858 -0.4278 0.7205 -1.0124 -0.7583 -0.7624 -0.4072 1.5652 0.1684 0.9845 0.7663 1.062 -0.3829 0.6011 -0.9557 1.1062 -0.4129 -0.4782 -0.8657 1.8486 0.3454 1.5115 0.1737 0.7578 0.6729 -1.1841 -0.2324 -0.6245 0.3373 -0.263 0.0741 0.3575 -1.6811 -3.5583 -0.0087 0.6285 -0.8207 -0.5233 -0.1317 1.2081 0.086 0.8036 -0.6026 -0.9971 -1.0492 0.0609 -0.22 0.6285 0.1584 -0.7949 1.4219 0.3154 0.404 0.633 0.3976 -1.0276 0.8453 -0.1049 2.2934 0.3669 0.8453 0.9049 -0.3835 0.9219 -0.4046 -0.7734 -0.3791 -0.6588 2.5971 -0.3701 1.4592 0.5305 -1.7401 -1.2929 1.6979 0.7958 0.8907 -0.1704 -0.6866 1.3637 1.9943 3.9347 0.7555 0.5334 1.0201 0.9344 1.9089 -0.5542 -0.026 0.8358 0.4011 -0.1366 -0.8214 -4.4119 1.126 -0.0369 0.9779 -0.992 2.0081 0.4408 -0.516 1.1603 -0.0546 0.0383 0.153 0.1572 0.7018 -0.981 0.0233 0.4604 -1.2624 -2.8731 -0.0896 -0.3612 -0.1983 0.2108 0.2618 0.9003 -0.6292 -5.3496 -0.5701 -0.0849 -0.8573 -0.5114 -1.0889 0.4798 2.2769 0.9484 0.7047 -0.9289 -0.9384 0.6746 0.0108 1.466 0.9823 1.0456 -1.3588 0.3235 2.3568 0.7958 0.7868 -0.7206 -1.2212 -0.0733 -0.0787 0.1873 0.1334 0.6085 1.2498 -1.978 -0.7603 0.4677 -0.2674 0.6638 -0.2543 -0.9643 -0.8792 -1.8273 0.9316 -1.7959 0.5586 -0.9183 0.4091 -0.4014 -0.46 0.0735 0.2073 0.5258 1.1839 -0.4529 0.4045 0.3894 0.2477 1.6407 0.2367 1.4547 0.4178 -0.3234 -0.3829 1.1608 -0.1055 0.5726 -0.2493 -0.1201 0.4056 0.3634 -0.2493 -0.5668 0.0544 -1.4014 0.6251 -0.1903 0.5891 0.7668 -0.0824 -0.6012 0.0167 -0.2299 0.098 -0.0194 1.2914 -1.3771 -1.2882 0.481 -0.9657 -0.2768 -0.3988 0.8538 0.1944 -0.5377 -0.1538 -0.3095 -1.0987 -0.3982 -0.5589 -0.1049 -1.1258 -0.1275 -0.4516 0.156 -3.0002 -0.5675 0.9676 -0.1128 0.3212 0.5126 0.5184 -0.9247 0.4051 -0.2088 -0.9745 -0.1287 -0.3088 0.562 0.9716 -0.5358 -0.147 -0.7048 0.9456 0.678 -1.0197 1.517 -0.6006 0.7441 -0.8706 -1.6959 -0.5055 -1.5215 -0.3537 0.5057 -0.9693 -1.0374 -1.3564 0.0108 0.2408 -1.6177 -1.8147 -2.2696 1.4235 1.5137 0.8335 0.4391 -0.1569 -0.8713 0.7065 -1.1016 0.695 0.404 -0.3171 0.2687 -0.3886 -0.818 -0.7859 0.4598 -1.0565 -0.2717 -0.4065 -2.2268 -0.2237 -0.0327 1.006 0.1926 -2.0824 1.3331 -0.1354 1.1918 0.3971 -0.7096 1.0365 0.3511 0.5493 -0.6656 -1.3356 0.3784 -1.4437 1.5804 0.2722 -1.3086 1.1529 1.1209 0.7313 -0.5675 -1.1918 1.8864 0.9225 -0.16 0.4161 -0.3676 -1.5696 0.8211 -2.8244 -0.0159 0.7093 -0.4374 -0.7562 0.332 0.0113 -0.7219 -0.5101 -0.3638 0.5391 -0.6352 -0.4568 0.897 0.3143 -0.4535 0.7583 0.9637 -0.0128 0.6523 -0.9247 0.7441 -0.4142 -0.7749 0.1607 2.294 -0.1797 1.7604 0.4564 -0.7389 -0.3548 1.3604 -0.1104 1.126 0.0895 -0.5463 0.2103 -0.2318 -0.9355 -0.1043 -0.1778 -0.6165 0.5155 -1.0897 -0.8742 -0.8053 -0.4951 -1.4323 0.8148 0.2239 0.1157 -1.6506 -0.8657 -0.6245 -2.5593 -0.1159 0.2021
最新发布
09-29
主流程:<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"> <process id="NewGenAi" name="new-genAi-process" isExecutable="true"> <documentation>新建GenAi文档流程</documentation> <startEvent id="sid-94f85fdc-8e18-4d0d-91d8-d530a04e2799" name="开始"> <documentation>用户新上传GenAi文档提交后触发此流程</documentation> </startEvent> <userTask id="sid-be8d7c10-6422-4ee1-ba61-b8d54b1719ef" name="新建GenAi文档" activiti:assignee="${startUser}"/> <sequenceFlow id="sid-254e523d-7d46-4741-904a-76b86f206ef2" sourceRef="sid-be8d7c10-6422-4ee1-ba61-b8d54b1719ef" targetRef="sid-38bb2367-af79-4080-b1f0-b54032d6c669"/> <sequenceFlow id="sid-d333120a-7314-40ab-874d-02c35a232d2d" sourceRef="sid-94f85fdc-8e18-4d0d-91d8-d530a04e2799" targetRef="sid-be8d7c10-6422-4ee1-ba61-b8d54b1719ef"/> <userTask id="sid-38bb2367-af79-4080-b1f0-b54032d6c669" name="文档审核" activiti:candidateGroups="auditGroup"/> <exclusiveGateway id="sid-bbf31e8e-8c49-4bc1-a284-3400b0b58281" name="审核文档排他网关"/> <sequenceFlow id="sid-bba0d056-0054-4b56-b89d-cf2d2e8360b9" sourceRef="sid-38bb2367-af79-4080-b1f0-b54032d6c669" targetRef="sid-bbf31e8e-8c49-4bc1-a284-3400b0b58281"/> <sequenceFlow id="sid-524f0430-a978-47c4-97b8-ae7af00f7172" sourceRef="sid-bbf31e8e-8c49-4bc1-a284-3400b0b58281" targetRef="sid-be8d7c10-6422-4ee1-ba61-b8d54b1719ef" name="审核不通过"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${newGenAiProcessService.newGenAiUploadReject(execution)}]]></conditionExpression> </sequenceFlow> <userTask id="sid-f3162684-cc1f-403e-a519-639f43cdcc4b" name="上传清洗文档" activiti:candidateGroups="uploadCleanGroup"/> <sequenceFlow id="sid-e471e27a-fa58-42d1-8c92-c46fbc1b6662" sourceRef="sid-bbf31e8e-8c49-4bc1-a284-3400b0b58281" targetRef="sid-f3162684-cc1f-403e-a519-639f43cdcc4b" name="审核通过"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${newGenAiProcessService.newGenAiUploadPass(execution)}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="sid-c1414816-a5ca-4ed0-a8f8-a27cea6ab483" sourceRef="sid-f3162684-cc1f-403e-a519-639f43cdcc4b" targetRef="sid-54d40cec-c979-4b92-a7c7-e282b7f84935"/> <callActivity id="sid-54d40cec-c979-4b92-a7c7-e282b7f84935" name="内部验证子流程" calledElement="DocRelease"> <extensionElements> <activiti:in source="startUser" target="starter"/> <activiti:in source="env" target="newEnv"/> <activiti:out source="validResult" target="newValidResult"/> </extensionElements> </callActivity> <sequenceFlow id="sid-40255e80-f39d-4166-8205-c3a70018da28" sourceRef="sid-54d40cec-c979-4b92-a7c7-e282b7f84935" targetRef="sid-1b511ba6-78dd-4542-bfce-6a5f8ca983d7"/> <exclusiveGateway id="sid-1b511ba6-78dd-4542-bfce-6a5f8ca983d7" name="内部验证判断"/> <sequenceFlow id="sid-bb93c26d-333a-4da6-bac7-27f7e1effe25" sourceRef="sid-1b511ba6-78dd-4542-bfce-6a5f8ca983d7" targetRef="sid-f3162684-cc1f-403e-a519-639f43cdcc4b" name="内部验证不通过(无需更新业务文档)"> <conditionExpression xsi:type="tFormalExpression">${newGenAiProcessService.validReject1(execution)}</conditionExpression> </sequenceFlow> <sequenceFlow id="sid-c7c96f8b-1917-41ad-b908-506cbe170d47" sourceRef="sid-1b511ba6-78dd-4542-bfce-6a5f8ca983d7" targetRef="sid-be8d7c10-6422-4ee1-ba61-b8d54b1719ef" name="内部验证不通过(需更新业务文档)"> <conditionExpression xsi:type="tFormalExpression">${newGenAiProcessService.validReject2(execution)}</conditionExpression> </sequenceFlow> <userTask id="sid-ce413f29-ac22-43d9-aabd-354008b2d314" name="UAT验证" activiti:assignee="${startUser}"/> <sequenceFlow id="sid-aacbfb31-a5a6-46a7-b1cd-1287f223de11" sourceRef="sid-1b511ba6-78dd-4542-bfce-6a5f8ca983d7" targetRef="sid-ce413f29-ac22-43d9-aabd-354008b2d314" name="内部验证通过"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${newGenAiProcessService.validPass(execution)}]]></conditionExpression> </sequenceFlow> <exclusiveGateway id="sid-298e882c-31b9-4dd5-9e6f-68b7ec332877" name="UAT验证判断"/> <sequenceFlow id="sid-5e472870-f3a5-4eb9-9f15-8909888c3f22" sourceRef="sid-ce413f29-ac22-43d9-aabd-354008b2d314" targetRef="sid-298e882c-31b9-4dd5-9e6f-68b7ec332877"/> <sequenceFlow id="sid-41aecdcd-ded9-4f2c-96ba-20ae8c885167" sourceRef="sid-298e882c-31b9-4dd5-9e6f-68b7ec332877" targetRef="sid-f3162684-cc1f-403e-a519-639f43cdcc4b" name="UAT验证不通过"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${newGenAiProcessService.uatReject(execution)}]]></conditionExpression> </sequenceFlow> <userTask id="sid-2139a735-de3b-4d23-a812-7302837763dc" name="发布知识文档" activiti:candidateGroups="uploadProdGroup"/> <sequenceFlow id="sid-a72234ff-d9ab-440b-86cf-7c602e38a6c1" sourceRef="sid-298e882c-31b9-4dd5-9e6f-68b7ec332877" targetRef="sid-2139a735-de3b-4d23-a812-7302837763dc" name="UAT验证通过"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${newGenAiProcessService.uatPass(execution)}]]></conditionExpression> </sequenceFlow> <endEvent id="sid-07707fbe-d1ac-4f15-bd14-d01f6b8f7017" name="结束"/> <sequenceFlow id="sid-771f8cef-da13-4a58-ad7c-094d7da79db0" sourceRef="sid-2139a735-de3b-4d23-a812-7302837763dc" targetRef="sid-07707fbe-d1ac-4f15-bd14-d01f6b8f7017"/> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_new-genAi"> <bpmndi:BPMNPlane bpmnElement="new-genAi" id="BPMNPlane_new-genAi"> <bpmndi:BPMNShape id="shape-45edce9d-cd62-456d-89d0-0317c5f54600" bpmnElement="sid-94f85fdc-8e18-4d0d-91d8-d530a04e2799"> <omgdc:Bounds x="1670.0" y="-935.0" width="30.0" height="30.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-97e92081-50b0-447a-8574-dd289afc6fd9" bpmnElement="sid-d333120a-7314-40ab-874d-02c35a232d2d"> <omgdi:waypoint x="1700.0" y="-920.0"/> <omgdi:waypoint x="1770.0" y="-919.99994"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-3d626e9e-ad73-4e23-b6e0-cf126a370a55" bpmnElement="sid-38bb2367-af79-4080-b1f0-b54032d6c669"> <omgdc:Bounds x="1970.0" y="-960.0" width="100.0" height="80.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="shape-f7b8d57e-be19-4cd0-9be8-a5b13a0a6099" bpmnElement="sid-bbf31e8e-8c49-4bc1-a284-3400b0b58281"> <omgdc:Bounds x="2155.0" y="-940.0" width="40.0" height="40.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-1b434013-0622-453d-b55e-052099562f23" bpmnElement="sid-bba0d056-0054-4b56-b89d-cf2d2e8360b9"> <omgdi:waypoint x="2070.0002" y="-920.0"/> <omgdi:waypoint x="2155.0" y="-920.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-954dbb4b-dd81-4334-b638-3b2fa8ffc964" bpmnElement="sid-be8d7c10-6422-4ee1-ba61-b8d54b1719ef"> <omgdc:Bounds x="1775.0" y="-959.99994" width="100.0" height="80.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-ebc1767f-f37b-47a4-98b2-489fe94af21f" bpmnElement="sid-254e523d-7d46-4741-904a-76b86f206ef2"> <omgdi:waypoint x="1875.0001" y="-919.99994"/> <omgdi:waypoint x="1970.0" y="-920.00006"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="edge-b028d95e-34f7-4584-9c1c-e0bbebba3026" bpmnElement="sid-524f0430-a978-47c4-97b8-ae7af00f7172"> <omgdi:waypoint x="2175.0" y="-900.0"/> <omgdi:waypoint x="2175.0002" y="-795.0"/> <omgdi:waypoint x="1825.0" y="-794.99994"/> <omgdi:waypoint x="1825.0" y="-879.99994"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-b16b4cf5-c0ee-4b97-a758-1b393f995756" bpmnElement="sid-f3162684-cc1f-403e-a519-639f43cdcc4b"> <omgdc:Bounds x="2275.0" y="-960.0" width="100.0" height="80.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-43083e45-ea9a-4af1-ada3-e44d959ad661" bpmnElement="sid-e471e27a-fa58-42d1-8c92-c46fbc1b6662"> <omgdi:waypoint x="2195.0" y="-920.0"/> <omgdi:waypoint x="2270.0" y="-920.00006"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-1123a54e-e2ce-48aa-becf-fc920c460655" bpmnElement="sid-4f2f02df-6f50-498e-91e4-25a9a805f3a7"> <omgdc:Bounds x="2605.0" y="-960.0" width="100.0" height="80.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-0fef188d-acb0-44bf-9784-8b653e2802d1" bpmnElement="sid-c1414816-a5ca-4ed0-a8f8-a27cea6ab483"> <omgdi:waypoint x="2375.0" y="-920.0"/> <omgdi:waypoint x="2469.9998" y="-920.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="edge-31dfa465-822b-4f33-8d8a-b6a58984d208" bpmnElement="sid-40255e80-f39d-4166-8205-c3a70018da28"> <omgdi:waypoint x="2570.0" y="-919.99994"/> <omgdi:waypoint x="2670.0" y="-920.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-82d0f3d4-8262-4d48-8e33-cda12c6f5260" bpmnElement="sid-1b511ba6-78dd-4542-bfce-6a5f8ca983d7"> <omgdc:Bounds x="2670.0" y="-940.0" width="40.0" height="40.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="shape-b29dd040-e328-48fa-bd8d-21a6e826dfe6" bpmnElement="sid-ce413f29-ac22-43d9-aabd-354008b2d314"> <omgdc:Bounds x="2790.0" y="-960.0" width="100.0" height="80.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-4f65be34-7525-4000-b9b3-d7185c721ae8" bpmnElement="sid-aacbfb31-a5a6-46a7-b1cd-1287f223de11"> <omgdi:waypoint x="2710.0" y="-920.0"/> <omgdi:waypoint x="2795.0" y="-920.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-3f88168e-2f30-4dc4-bef3-f7c145abd307" bpmnElement="sid-298e882c-31b9-4dd5-9e6f-68b7ec332877"> <omgdc:Bounds x="2975.0" y="-940.00006" width="40.0" height="40.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-3c009d61-65bb-45bd-89e7-40800d4e5fbc" bpmnElement="sid-5e472870-f3a5-4eb9-9f15-8909888c3f22"> <omgdi:waypoint x="2889.9998" y="-920.0"/> <omgdi:waypoint x="2980.0" y="-920.00006"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="edge-c0185569-99b7-44fa-8c43-6326044d7263" bpmnElement="sid-41aecdcd-ded9-4f2c-96ba-20ae8c885167"> <omgdi:waypoint x="2995.0" y="-900.00006"/> <omgdi:waypoint x="2995.0" y="-760.0"/> <omgdi:waypoint x="2325.0" y="-754.99994"/> <omgdi:waypoint x="2325.0002" y="-879.99994"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-49240f51-ecf9-4100-ac49-581a83b12264" bpmnElement="sid-2139a735-de3b-4d23-a812-7302837763dc"> <omgdc:Bounds x="3130.0" y="-960.00006" width="100.0" height="80.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-c1a01c57-fdba-4819-b2e5-5f4317915f76" bpmnElement="sid-a72234ff-d9ab-440b-86cf-7c602e38a6c1"> <omgdi:waypoint x="3015.0" y="-920.00006"/> <omgdi:waypoint x="3130.0" y="-920.00006"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-e24d4246-91e1-480a-be4f-20253c8afff2" bpmnElement="sid-07707fbe-d1ac-4f15-bd14-d01f6b8f7017"> <omgdc:Bounds x="3330.0" y="-935.00006" width="30.0" height="30.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-c5c9201c-d3df-4597-b3dd-93259911c32b" bpmnElement="sid-771f8cef-da13-4a58-ad7c-094d7da79db0"> <omgdi:waypoint x="3235.0" y="-920.00006"/> <omgdi:waypoint x="3330.0002" y="-920.0001"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="edge-98d6f62c-d989-43dc-8622-7c7123e960df" bpmnElement="sid-bb93c26d-333a-4da6-bac7-27f7e1effe25"> <omgdi:waypoint x="2690.0" y="-900.0"/> <omgdi:waypoint x="2689.9998" y="-795.0"/> <omgdi:waypoint x="2325.0" y="-795.0"/> <omgdi:waypoint x="2325.0005" y="-879.99994"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="edge-7cfcc346-c7f0-41bf-88d1-4897a45e1403" bpmnElement="sid-c7c96f8b-1917-41ad-b908-506cbe170d47"> <omgdi:waypoint x="2690.0" y="-940.0"/> <omgdi:waypoint x="2690.0" y="-1060.0"/> <omgdi:waypoint x="1825.0" y="-1060.0"/> <omgdi:waypoint x="1825.0" y="-960.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-79f7da74-d143-4d88-9ecf-d9444521f64d" bpmnElement="sid-6b6c734e-ccb2-4a38-9a4d-e6422988ee1d"> <omgdc:Bounds x="2485.0" y="-935.0" width="30.0" height="30.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-d3972d9b-873f-469c-9384-c4db8bf585d1" bpmnElement="sid-a106742b-e354-46fe-a250-aaa9d3364257"> <omgdi:waypoint x="2515.0" y="-920.0"/> <omgdi:waypoint x="2605.0" y="-920.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-0923f43a-6ef8-445b-9c8d-4793f226efda" bpmnElement="sid-e0de138b-7401-4608-b20b-f966901a404f"> <omgdc:Bounds x="2800.0" y="-935.0" width="30.0" height="30.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-093fb26d-005e-4d24-a490-94568d4ab5b8" bpmnElement="sid-534ffcd8-8b5b-49e2-bbe0-56570f0e92ef"> <omgdi:waypoint x="2705.0" y="-920.0"/> <omgdi:waypoint x="2800.0" y="-920.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-caef8990-d6ea-4c2d-85e5-78927e8a2641" bpmnElement="sid-54d40cec-c979-4b92-a7c7-e282b7f84935"> <omgdc:Bounds x="2470.0" y="-960.0" width="100.0" height="80.0"/> </bpmndi:BPMNShape> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions> 子流程:<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"> <process id="DocRelease" name="doc-release" isExecutable="true"> <documentation>文档发布流程</documentation> <startEvent id="sid-dcadb381-7dad-47d3-a734-29776319e636" name="开始"/> <sequenceFlow id="sid-dc6d8137-3707-4773-82c3-459e2c75a5f7" sourceRef="sid-dcadb381-7dad-47d3-a734-29776319e636" targetRef="sid-31f87ba7-b37e-4b33-8d6f-a0676615cd22"/> <exclusiveGateway id="sid-31f87ba7-b37e-4b33-8d6f-a0676615cd22" name="判断发布环境"/> <userTask id="sid-d2bd86c8-f0fd-46dd-bac0-543c148e123d" name="st验证" activiti:assignee="${starter}"/> <sequenceFlow id="sid-b4a4a73d-370d-446f-a64f-0a0862b227b3" sourceRef="sid-31f87ba7-b37e-4b33-8d6f-a0676615cd22" targetRef="sid-d2bd86c8-f0fd-46dd-bac0-543c148e123d" name="发布到ST"> <conditionExpression xsi:type="tFormalExpression">${docReleaseProcessService.stRelease(execution)}</conditionExpression> </sequenceFlow> <userTask id="sid-802b11b8-8220-4602-a77d-28dadfb606ca" name="uat验证" activiti:assignee="${starter}"/> <sequenceFlow id="sid-3a683c84-a606-4af8-b382-a7bd545fca4f" sourceRef="sid-31f87ba7-b37e-4b33-8d6f-a0676615cd22" targetRef="sid-802b11b8-8220-4602-a77d-28dadfb606ca" name="发布到UAT"> <conditionExpression xsi:type="tFormalExpression">${docReleaseProcessService.uatRelease(execution)}</conditionExpression> </sequenceFlow> <sequenceFlow id="sid-539ddbbe-bf7e-4c82-a5ec-248d9c8d964f" sourceRef="sid-31f87ba7-b37e-4b33-8d6f-a0676615cd22" targetRef="sid-568f8bd5-b8f0-4873-88fc-940c1b525062" name="发布到PROD"> <conditionExpression xsi:type="tFormalExpression">${docReleaseProcessService.prodRelease(execution)}</conditionExpression> </sequenceFlow> <endEvent id="sid-568f8bd5-b8f0-4873-88fc-940c1b525062" name="结束"/> <sequenceFlow id="sid-fc853af8-3aca-4f00-bc84-6110cebeffd5" sourceRef="sid-d2bd86c8-f0fd-46dd-bac0-543c148e123d" targetRef="sid-568f8bd5-b8f0-4873-88fc-940c1b525062"/> <sequenceFlow id="sid-2873378c-edcd-4beb-84eb-52491ae605f9" sourceRef="sid-802b11b8-8220-4602-a77d-28dadfb606ca" targetRef="sid-568f8bd5-b8f0-4873-88fc-940c1b525062"/> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_DocRelease"> <bpmndi:BPMNPlane bpmnElement="DocRelease" id="BPMNPlane_DocRelease"> <bpmndi:BPMNShape id="shape-8fe9c101-34fa-4c30-8e1d-66c0b1d8c7a6" bpmnElement="sid-dcadb381-7dad-47d3-a734-29776319e636"> <omgdc:Bounds x="-1360.0" y="-80.0" width="30.0" height="30.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-9c3699b9-abaf-455c-9e65-f5e70dda80ab" bpmnElement="sid-dc6d8137-3707-4773-82c3-459e2c75a5f7"> <omgdi:waypoint x="-1330.0" y="-65.0"/> <omgdi:waypoint x="-1235.0001" y="-65.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-8bafec0f-d3a0-43d1-b7d2-16eec7d6e26b" bpmnElement="sid-31f87ba7-b37e-4b33-8d6f-a0676615cd22"> <omgdc:Bounds x="-1235.0" y="-85.0" width="40.0" height="40.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="shape-e52df4d5-f08c-4978-8f6a-f874cf4268c1" bpmnElement="sid-d2bd86c8-f0fd-46dd-bac0-543c148e123d"> <omgdc:Bounds x="-1065.0" y="-240.0" width="100.0" height="80.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-d3ffcd8c-bcd7-47e5-8094-393ff0aa519e" bpmnElement="sid-b4a4a73d-370d-446f-a64f-0a0862b227b3"> <omgdi:waypoint x="-1214.9999" y="-84.99999"/> <omgdi:waypoint x="-1215.0" y="-200.0"/> <omgdi:waypoint x="-1065.0001" y="-199.99998"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-ed0624fb-11a4-4d83-a35f-0d0dc2bf620c" bpmnElement="sid-802b11b8-8220-4602-a77d-28dadfb606ca"> <omgdc:Bounds x="-1065.0" y="-105.0" width="100.0" height="80.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-0aa7a874-442c-4579-b2dd-a3c5b206e21f" bpmnElement="sid-3a683c84-a606-4af8-b382-a7bd545fca4f"> <omgdi:waypoint x="-1195.0" y="-65.0"/> <omgdi:waypoint x="-1065.0" y="-65.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="edge-a93fe20f-d632-4def-8ae1-89ef196ddcef" bpmnElement="sid-539ddbbe-bf7e-4c82-a5ec-248d9c8d964f"> <omgdi:waypoint x="-1215.0" y="-45.0"/> <omgdi:waypoint x="-1215.0" y="95.00001"/> <omgdi:waypoint x="-727.49994" y="90.0"/> <omgdi:waypoint x="-730.00006" y="-50.000008"/> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="shape-7633c1e9-3213-4b44-8a4e-1b616558c016" bpmnElement="sid-568f8bd5-b8f0-4873-88fc-940c1b525062"> <omgdc:Bounds x="-745.0" y="-80.00001" width="30.0" height="30.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="edge-61848724-1f3a-4c65-8519-189f9fed5212" bpmnElement="sid-fc853af8-3aca-4f00-bc84-6110cebeffd5"> <omgdi:waypoint x="-965.0" y="-200.0"/> <omgdi:waypoint x="-730.0" y="-200.0"/> <omgdi:waypoint x="-730.0" y="-80.00001"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="edge-765dd101-5471-4b29-8dd1-a12f34476591" bpmnElement="sid-2873378c-edcd-4beb-84eb-52491ae605f9"> <omgdi:waypoint x="-965.0" y="-65.0"/> <omgdi:waypoint x="-745.0" y="-65.00001"/> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions> 请帮我检查这两个流程是否有问题
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值