如何在C语言中解析包含文本与数字的混合格式文本文件?
没问题,我来帮你搞定这个混合格式文本文件的解析任务!针对你提到的需求,我用Python来演示具体实现步骤,你可以直接复用或者调整到自己的代码里。
解析混合格式文本文件:提取参数与转换二维数组
步骤1:提取前6行的关键数值
前6行都是「参数描述: 数值」的固定格式,咱们可以用正则表达式精准匹配数值部分,不用纠结前面的文本内容。先看下目标内容:
Resistance per unit length (ohm/um): 0.0165
Capacitance per unit length (F/um): 1.8400e-016
Sink node capacitance (F): 2.500000e-016
Buffer output resistance (ohm): 0.01
Sinkcount: 267
Nodecount: 965
提取逻辑很简单:读取前6行,每行匹配末尾的数值,自动识别整数、浮点数(包括科学计数法),然后存储到变量字典里。
步骤2:转换剩余数据为二维数组
从注释行%thisnode parnode lcnode rcnode length(um) xloc(um) yloc(um)之后,所有行都是结构化的表格数据。咱们需要跳过注释行,把每行的字符串分割成单个数值元素,最终组合成二维数组。
完整代码实现
import re # 读取文件内容(替换成你的文件路径) with open('your_data_file.txt', 'r') as f: # 过滤空行并去除每行首尾空格 lines = [line.strip() for line in f if line.strip()] # 1. 提取前6行参数到变量字典 extracted_params = {} # 对应前6行的变量名,方便后续调用 param_keys = [ 'resistance_per_unit', 'capacitance_per_unit', 'sink_node_cap', 'buffer_output_res', 'sinkcount', 'nodecount' ] for idx in range(6): line_content = lines[idx] # 匹配末尾的数值(支持科学计数法) num_match = re.search(r'([\d.e-]+)$', line_content) if num_match: num_str = num_match.group(1) # 判断是整数还是浮点数 if '.' in num_str or 'e' in num_str.lower(): extracted_params[param_keys[idx]] = float(num_str) else: extracted_params[param_keys[idx]] = int(num_str) # 验证参数提取结果 print("提取的参数:") for key, val in extracted_params.items(): print(f"{key}: {val}") # 2. 转换剩余数据为二维数组 # 找到注释行的位置并跳过它 header_line_idx = next(i for i, line in enumerate(lines) if line.startswith('%')) data_rows = lines[header_line_idx + 1:] # 逐行处理成数值数组 two_dimensional_array = [] for row_str in data_rows: # 按空格分割(自动处理多个连续空格) elements = row_str.split() # 转换每个元素为对应数值类型 processed_row = [] for elem in elements: if '.' in elem or 'e' in elem.lower(): processed_row.append(float(elem)) else: processed_row.append(int(elem)) two_dimensional_array.append(processed_row) # 验证二维数组前3行 print("\n二维数组前3行预览:") for row in two_dimensional_array[:3]: print(row)
代码说明
- 参数提取:用正则
r'([\d.e-]+)$'精准定位每行末尾的数值,自动识别数据类型,存储到字典后你可以通过extracted_params['sinkcount']直接调用。 - 二维数组转换:先定位注释行位置并跳过,再逐行分割字符串、转换数值类型,最终得到的数组可以直接用于后续计算或数据分析。
- 灵活性:如果你的文件路径、参数名称有变化,只需要调整文件名或
param_keys列表即可。
内容的提问来源于stack exchange,提问作者mmm
相关产品推荐
相关产品推荐

