You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:44:57