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

请求完善TCL脚本:提取电压数据并生成指定格式输出文件

问题描述

现有一数据文件,首行定义各类电压类型(如VDDQL(W)、VDDA(W)等),后续每行包含模块名称及对应电压值,电压值间以一个或多个制表符分隔。要求将输入文件转换为指定格式的输出文件。

输入文件示例

Block Name  VDDQL(W)    VDDA(W) VDD(W)  VDDPLL  VDD1P2
Data IO TX  8.80E-04    3.00E-04    1.10E-03        
Data IO RX  1.88E-05    4.35E-04    6.15E-04        
WDQS    2.10E-03    9.00E-04    2.30E-03        
RDQS        1.30E-03            
TX_CLKGEN       1.20E-03    3.30E-03        
TX_CLKGEN_WDQS      1.00E-03    2.90E-03        
RX_CLKGEN       4.00E-03            
INV_32X     4.13E-04            
INV_64X     5.63E-04            
INV_128X        9.38E-04            
INV_256X        1.70E-03            
ZQ Calibration  9.60E-03            2.30E-03    
HBM3_PLL                7.50E-03    1.36E-02
SoC PLL             7.50E-03    1.36E-02
RX_VREF 3.96E-04        3.30E-06        

期望输出文件格式

Data IO TX < 8.80E-04 3.00E-04 1.10E-03 > VDDQL(W) VDDA(W) VDD(W) 
Data IO RX < 1.88E-05 4.35E-04 6.15E-04 > VDDQL(W) VDDA(W) VDD(W) 
WDQS < 2.10E-03 9.00E-04 2.30E-03 > VDDQL(W) VDDA(W) VDD(W) 
RDQS < 1.30E-03 > VDDA(W) 
TX_CLKGEN < 1.20E-03 3.30E-03 > VDDA(W) VDD(W) 
TX_CLKGEN_WDQS < 1.00E-03 2.90E-03 > VDDA(W) VDD(W)
RX_CLKGEN < 4.00E-03 > VDDA(W) 
INV_32X< 4.13E-04 > VDDA(W) 
INV_64X < 5.63E-04 > VDDA(W) 
INV_128X < 9.38E-04 > VDDA(W) 
INV_256X < 1.70E-03  > VDDA(W) 
ZQ Calibration < 9.60E-03 2.30E-03 > VDDQL(W) VDD(W) 
HBM3_PLL < 7.50E-03 1.36E-02 > VDD(W) VDDPLL    
SoC PLL < 7.50E-03 1.36E-02 > VDDA(W) VDD(W) 
RX_VREF < 3.96E-04 3.30E-06 > VDDQL(W) VDD(W)

现有代码(逻辑受阻)

while {[gets $in_lib line] >=0} {
    if {[string match {*Block*} $line] == 1} {
        set input $line     
        set columns [split $input {\s+}]
        set blockName [lindex $columns 0]
        set column_1 [lindex $columns 1]
        set column_2 [lindex $columns 2]
        set column_3 [lindex $columns 3]
        set column_4 [lindex $columns 4]
        set column_5 [lindex $columns 5]
    } else {
        set lineData $line
    }   
    foreach data_line $lineData {
                set columns [split $line "\t"]
        # Extract the keyword and values
                set keyword [lindex $columns 0]
                set value1 [lindex $columns 1]
                set value2 [lindex $columns 2]
                set value3 [lindex $columns 3]
            set value4 [lindex $columns 4]
            set value5 [lindex $columns 5]
                # Print the extracted data
                set Keyword $keyword
                set Value1 $value1
                set Value2 $value2
                set Value3 $value3
                set Value4 $value4
            set Value5 $value5  
    }
    puts $Keyword

解决方案

以下是完善后的TCL脚本,可实现输入到输出的格式转换:

# 打开输入和输出文件,替换为实际文件路径
set in_file [open "input.txt" r]
set out_file [open "output.txt" w]

# 读取首行并解析电压类型
gets $in_file header_line
# 分割首行,忽略空字符串,得到电压类型列表
set voltage_types [lsearch -all -inline -not $header_line ""]
# 移除第一个元素"Block Name"
set voltage_types [lrange $voltage_types 1 end]

# 处理后续每一行数据
while {[gets $in_file line] >= 0} {
    # 分割行数据,忽略空字符串
    set parts [lsearch -all -inline -not [split $line "\t"] ""]
    if {[llength $parts] == 0} {
        continue ;# 跳过空行
    }
    # 模块名称是第一个元素
    set block_name [lindex $parts 0]
    # 剩余元素是电压值
    set values [lrange $parts 1 end]

    # 收集非空值对应的电压类型和值
    set valid_values [list]
    set valid_types [list]
    foreach val $values type $voltage_types {
        if {$val ne ""} {
            lappend valid_values $val
            lappend valid_types $type
        }
    }

    # 构建输出行
    set output_line "$block_name < [join $valid_values " "] > [join $valid_types " "]"
    # 写入输出文件并打印到控制台
    puts $out_file $output_line
    puts $output_line
}

# 关闭文件
close $in_file
close $out_file

关键逻辑说明

  1. 首行处理:读取首行后,分割并过滤空字符串,提取出所有电压类型,去掉开头的"Block Name"。
  2. 数据行处理:对每一行数据按制表符分割,过滤空字符串,分离模块名称和电压值。
  3. 有效值匹配:遍历电压值和对应的电压类型,只保留非空值及其对应的类型。
  4. 输出构建:按照指定格式拼接模块名称、有效值(用< >包裹)、有效电压类型,写入输出文件。

内容的提问来源于stack exchange,提问作者Santhosh Nayak D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:07:55