如何用Python或Excel公式拆分Excel单列编译警告数据为多列
编译警告行拆分方案
Python 实现
可以通过正则表达式或字符串分割两种方式实现,以下是具体代码:
正则表达式方式
import re # 示例警告行 warning_line = r"D:\SVN_EVCU2_Compiler\EVCU_2_0_Project_APP\BUILD/../SSW_TC39X/src/Ifx_Ssw_Tc0.c:121:51: warning: no previous prototype for 'Jump_To_App' [-Wmissing-prototypes]" # 匹配规则:捕获基础路径、相对文件路径、警告详情 pattern = r"(.*BUILD)/\.\./(.*?):(.*)" match_result = re.match(pattern, warning_line) if match_result: base_col = f"({match_result.group(1)}/.)" file_col = f"({match_result.group(2)})" warning_col = f"({match_result.group(3)})" # 按制表符分隔输出,可直接复制到Excel print(f"{base_col}\t{file_col}\t{warning_col}")
字符串分割方式
warning_line = r"D:\SVN_EVCU2_Compiler\EVCU_2_0_Project_APP\BUILD/../SSW_TC39X/src/Ifx_Ssw_Tc0.c:121:51: warning: no previous prototype for 'Jump_To_App' [-Wmissing-prototypes]" # 定位BUILD/../的位置 split_marker = "BUILD/../" marker_pos = warning_line.find(split_marker) if marker_pos != -1: # 提取基础路径列 base_path = f"({warning_line[:marker_pos + len('BUILD')]}/.)" # 提取剩余部分 rest_content = warning_line[marker_pos + len(split_marker):] # 分割文件路径和警告详情 colon_pos = rest_content.find(":") file_path = f"({rest_content[:colon_pos]})" warning_detail = f"({rest_content[colon_pos+1:]})" # 输出结果 print(f"{base_path}\t{file_path}\t{warning_detail}")
Excel 公式实现
假设原始警告数据在单元格A1,分别在B1、C1、D1输入以下公式:
基础路径列(B1)
=CONCATENATE("(",LEFT(A1,FIND("BUILD/../",A1)+4),"/.)")
相对文件路径列(C1)
=CONCATENATE("(",MID(A1,FIND("BUILD/../",A1)+9,FIND(":",A1,FIND("BUILD/../",A1)+9)-FIND("BUILD/../",A1)-9),")")
警告详情列(D1)
=CONCATENATE("(",RIGHT(A1,LEN(A1)-FIND(":",A1,FIND("BUILD/../",A1)+9)),")")
公式说明:
- 利用
FIND定位BUILD/../的位置,拆分出基础路径的前缀; - 通过二次
FIND找到文件路径后的第一个冒号,分割出相对文件路径和警告内容; - 用
CONCATENATE给各部分添加括号包裹。
内容的提问来源于stack exchange,提问作者tushar nampalliwar
相关产品推荐
相关产品推荐

