• 1111


    import linecache
    
    def linecount(in_file_path):  # 第三种方法放入缓存防止内存过载
        count = -1
    
        for count, line in enumerate(open(in_file_path,'rb').readlines()):
    
            count += 1
    
        return count
        
    #取字符串中两个符号之间的东东,按第一次出现子串进行截取,start_str和end_str为首次出现的
    def txt_wrap_by_first(lineString,start_str, end_str):
        start = lineString.find(start_str) #python提供了从尾部搜索的方法,这种方法也是可行的。start = lineString.rfind(start_str) +2表示跳过::
        if start >= 0:
    	    start += len(start_str)
            end = lineString.find(end_str)
            if end >= 0:
                return lineString[start:end].strip()
                
        
    #取字符串中两个符号之间的东东,start_str和end_str为最后一次出现的
    def txt_wrap_by(lineString,start_str, end_str):
        start = find_last(lineString,start_str)#python提供了从尾部搜索的方法,这种方法也是可行的。start = lineString.rfind(start_str)
        if start >= 0:
            start += len(start_str)
            #end = lineString.find(end_str)
            end = find_last(lineString,end_str)
            if end >= 0:
                return lineString[start:end].strip()
                    
                    
                    
    #取字符串中两个符号之间的东东,start_str为首次出现的,end_str为最后一次出现的
    def txt_wrap_by_first_last(lineString,start_str,end_str):
        start = lineString.find(start_str)#python提供了从尾部搜索的方法,这种方法也是可行的。start = lineString.rfind(start_str)
        if start >= 0:
            start += len(start_str)
            end = lineString.rfind(end_str)
            if end >= 0:
                return lineString[start:end].strip()
                
                
                
                
                
    
    #在字符串中寻找目标最后一次出现的位置(python)             
    def find_last(lineString,start_str):
        last_position=-1
        while True:
            position=lineString.find(start_str,last_position+1)
            if position==-1:
                return last_position
            last_position=position
        return -1
        
    
    #取字符串中某个字符之前的东东,直到遇到空格截止
    def txt_wrap_before(lineString, end_str):
        lineSplit=lineString.split(' ')[4]
        end = lineSplit.find(end_str)
        if end >= 0:
            return lineSplit[:end].strip()
    
    
    
    
    
    
    
    '''
    #逆序从最后一行往前读取文件内容,并写入另一个文件
    
    def get_reverse_line(in_file_path,out_file_path):
        line_number=linecount()
        lineString = ''
        while line_number>0:
            lineString = lineString + linecache.getline(in_file_path, line_number)
            #print(lineString)
            
            line_number=line_number-1
        file = open(out_file_path,'w')
        file.write(lineString)
        file.close()
    
    
    
    #从最后一个字符倒着读取文件内容,并写入另一个文件
    def get_reverse_context(in_file_path,out_file_path):
        with open(in_file_path, "rt") as in_f, open(out_file_path, "wt") as out_f:
            for line in in_f:
                line = line.strip()
                reversed_line = ''.join(reversed(line))
                out_f.write(reversed_line + "
    ")
    
    
    
    
    #顺序读取文件内容,并原样写入另一个文件
    def get_same_context(in_file_path,out_file_path):
        in_file = open(in_file_path,'r')
        lineString = ''
        for lien in in_file.readlines():
            #lien = lien.strip()
            lineString = lineString + str(lien)
            #print(str(lien))
        #print(lineString)
    
        out_file = open(out_file_path,'w')
        out_file.write(lineString)
        out_file.close()
    '''
    
    
    #顺序读取文件内容,拼接处理后展示最后结果
    def get_result(in_file_path,out_file_path):
        line_number=linecount(in_file_path)  #获取文件行数
        lineString0 = ''         #提取文件名
        lineString1 = ''         #提取函数名
        outString0 = ''          #拼接本行RenderThread -> DrawFrameTask: run 
        outString1 = ''          #拼接上一行activate DrawFrameTask  
        outString = '@startuml'+'
    '+'autonumber'+'
    '           #拼接成最终结果
    
        while line_number-1>0:
    
            lineString0 = linecache.getline(in_file_path, line_number)
            lineString1 = linecache.getline(in_file_path, line_number-1)
            line_number=line_number-1        
            
            outString0 = outString0 + str(txt_wrap_by(lineString0,'/','.'))+' -> '+str(txt_wrap_by(lineString1,'/','.'))+': '
            if lineString1.find('.') >= 0: #包含.的行为有效行
                if lineString1.find('(') < 0:   #不包含括号
                    outString0+=str(txt_wrap_before(lineString1,'+'))
                elif lineString1.find('(') >= 0 and lineString1.split('  ')[2].find('::') < 0 :   #包含括号但不包含:: 
                    outString0+=str(txt_wrap_before(lineString1,'('))
                else:#包含括号包含:: 
                    outString0+=str(txt_wrap_by(lineString1,'::','('))
                outString1 = outString1 + 'activate '+str(txt_wrap_by(lineString1,'/','.'))
                outString = outString + outString0 + '
    ' + outString1 + '
    '
                outString0 = ''
                outString1 = ''
    
            
                #lineString = ''
                #print('outString'+outString)
            
    
        outString+='@enduml'
        file = open(out_file_path,'w')
        file.write(outString)
        file.close()
    
    
    
    
    
    
    #顺序读取文件内容,拼接处理后展示最后结果
    def get_result_at(in_file_path,out_file_path):
        line_number=linecount(in_file_path)  #获取文件行数
        lineString0 = ''         #提取文件名
        lineString1 = ''         #提取函数名
        outString0 = ''          #拼接本行RenderThread -> DrawFrameTask: run 
        outString1 = ''          #拼接上一行activate DrawFrameTask  
        outString = '@startuml'+'
    '+'autonumber'+'
    '           #拼接成最终结果
    
        while line_number-1>0:
    
            lineString0 = linecache.getline(in_file_path, line_number)
            lineString1 = linecache.getline(in_file_path, line_number-1)
            line_number=line_number-1        
            #print('lineString0'+lineString0)
            #print('lineString1'+lineString1)
            
            if lineString0.find('.cpp') >= 0 and lineString1.find('.cpp') >= 0: #包含.cpp为有效行
                if lineString1.find('::') > 0 : #包含::,函数名字提取
                    outString0 = outString0 + str(txt_wrap_by(lineString0,'/','.cpp'))+' -> '+str(txt_wrap_by(lineString1,'/','.cpp'))+': '+str(txt_wrap_by_first(str(txt_wrap_by(lineString1,': ',' at')),'::','('))#设配这种情况:: Routine Gift_sendLayer::initView(int A::a, int b) at 
                elif lineString1.find('::') < 0 : #不包含::,函数名字提取
                    outString0 = outString0 + str(txt_wrap_by(lineString0,'/','.cpp'))+' -> '+str(txt_wrap_by(lineString1,'/','.cpp'))+': '+str(lineString1.split(' ')[-3])
    
                outString1 = outString1 + 'activate '+str(txt_wrap_by(lineString1,'/','.cpp'))
                outString = outString + outString0 + '
    ' + outString1 + '
    '
                outString0 = ''
                outString1 = ''
                #print(outString)
                
    
                #print('outString'+outString)
                
    
        outString+='@enduml'
        file = open(out_file_path,'w')
        file.write(outString)
        file.close()
    
    
    
    
    #顺序读取文件内容,拼接处理后展示最后结果
    def get_result_crash_info(in_file_path,out_file_path):
        line_number=linecount(in_file_path)  #获取文件行数
        lineString0 = ''         #提取文件名
        lineString1 = ''         #提取函数名
        outString0 = ''          #拼接本行RenderThread -> DrawFrameTask: run 
        outString1 = ''          #拼接上一行activate DrawFrameTask  
        outString = '@startuml'+'
    '+'autonumber'+'
    '           #拼接成最终结果
    
        while line_number-1>0:
    
            lineString0 = linecache.getline(in_file_path, line_number)
            lineString1 = linecache.getline(in_file_path, line_number-1)
            line_number = line_number-1        
            #print('lineString0'+lineString0)
            #print('lineString1'+lineString1)
            
            if lineString0.find('#') >= 0 and lineString1.find('#') >= 0: #包含(为有效行
                if lineString0.find('::') >= 0 and lineString1.find('::') >= 0: #包含.cpp为有效行
                    outString0 = outString0 + str(txt_wrap_by_first_last(lineString0,'::','(')).split('::')[0]+' -> '+str(txt_wrap_by_first_last(lineString1,'::','(')).split('::')[0]+': '+str(txt_wrap_by_first_last(lineString1,'::','(')).split('::')[1]#设配这种情况:: Routine Gift_sendLayer::initView(int A::a, int b) at 
                    outString1 = outString1 + 'activate '+str(txt_wrap_by_first_last(lineString1,'::','(')).split('::')[0]
                
                elif lineString0.find('::') >= 0 and lineString1.find('::') < 0: #包含.cpp为有效行
                    outString0 = outString0 + str(txt_wrap_by_first_last(lineString0,'::','(')).split('::')[0]+' -> '+str(txt_wrap_by(lineString1.split(' ')[-2],'/','.'))+': '+str(txt_wrap_by(lineString1,'(','+'))#设配这种情况:: Routine Gift_sendLayer::initView(int A::a, int b) at 
                    outString1 = outString1 + 'activate '+str(txt_wrap_by(lineString1.split(' ')[-2],'/','.'))
                
                elif lineString0.find('::') < 0 and lineString1.find('::') < 0: #包含.cpp为有效行
                    outString0 = outString0 + str(txt_wrap_by(lineString0.split(' ')[-2],'/','.'))+' -> '+str(txt_wrap_by(lineString1.split(' ')[-2],'/','.'))+': '+str(txt_wrap_by(lineString1,'(','+'))#设配这种情况:: Routine Gift_sendLayer::initView(int A::a, int b) at 
                    outString1 = outString1 + 'activate '+str(txt_wrap_by(lineString1.split(' ')[-2],'/','.'))
                
                elif lineString0.find('::') < 0 and lineString1.find('::') >= 0: #包含.cpp为有效行
                    outString0 = outString0 + str(txt_wrap_by(lineString0.split(' ')[-2],'/','.'))+' -> '+str(txt_wrap_by_first_last(lineString1,'::','(')).split('::')[0]+': '+str(txt_wrap_by_first_last(lineString1,'::','(')).split('::')[1]#设配这种情况:: Routine Gift_sendLayer::initView(int A::a, int b) at 
                    outString1 = outString1 + 'activate '+str(txt_wrap_by_first_last(lineString1,'::','(')).split('::')[0]
    
    
                outString = outString + outString0 + '
    ' + outString1 + '
    '
                outString0 = ''
                outString1 = ''
                
    
        print('outString'+outString)
                
    
        outString+='@enduml'
        file = open(out_file_path,'w')
        file.write(outString)
        file.close()
    
    
    if __name__ == '__main__':
        in_file_path = r".	est_input.txt"
        out_file_path = r".	est_output.txt"
        get_result(in_file_path,out_file_path)
        
        in_file_path_at = r".	est_input_at.txt"
        out_file_path_at = r".	est_output_at.txt"
        get_result_at(in_file_path_at,out_file_path_at)
    
    
        in_file_path_crash_info = r".	est_input_crash_info.txt"
        out_file_path_crash_info = r".	est_output_crash_info.txt"
        get_result_crash_info(in_file_path_crash_info,out_file_path_crash_info)
    

      

  • 相关阅读:
    各类Http请求状态(status)及其含义 速查列表 xmlhttp status
    Microsoft Visual Studio 2010 正式版下载[含旗舰版序列号](中、英文版)
    【分享】开源或免费的ASP.NET web应用列表
    线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
    Asp.Net中多语言的实现
    Oracle 数字与空值的排序问题
    新版微软一站式示例代码库 6月2日更新下载。
    .NET反射机制简介
    Decimal与double类型误差
    用动态菜单增强.NET应用程序
  • 原文地址:https://www.cnblogs.com/tianzijiaozi/p/15395874.html
Copyright © 2020-2023  润新知