TCL如何读取版本文件实现指定工艺对应AA、BB版本的查询与修改
TCL工艺版本查询修改脚本实现
实现思路
使用数组完全可以满足需求,工艺名称作为唯一的数组键,对应的值存储AA、BB两个版本号,查询和修改效率都很高。因为你的版本文件体积很小,脚本更新时整体重写文件比局部修改更稳妥,不会出现格式错乱问题。
完整可运行代码
# 定义存储版本的数组,key为工艺名,value为[AA版本 BB版本]列表 array set version_map {} # 读取版本文件内容,如文件名不是tool_version请修改 set fp [open "tool_version" r] set file_content [read $fp] close $fp # 按行拆分,保留表头 set lines [split $file_content "\n"] set header [lindex $lines 0] # 解析所有行存入数组,跳过表头和空行 foreach line [lrange $lines 1 end] { set trim_line [string trim $line] if {$trim_line eq ""} { continue } # 正则提取所有非空白字段,自动忽略多空格分隔 set fields [regexp -all -inline {\S+} $trim_line] set process_name [lindex $fields 0] set aa_ver [lindex $fields 1] set bb_ver [lindex $fields 2] set version_map($process_name) [list $aa_ver $bb_ver] } # 接收用户输入的工艺名称 puts "请输入要查询的工艺名称:" flush stdout set target_process [string trim [gets stdin]] # 版本查询逻辑 if {![info exists version_map($target_process)]} { puts "错误:未找到工艺【$target_process】的版本信息" exit 1 } set current_aa [lindex $version_map($target_process) 0] set current_bb [lindex $version_map($target_process) 1] puts "===== 工艺 $target_process 版本信息 =====" puts "AA_version: $current_aa" puts "BB_version: $current_bb" # 版本修改逻辑 puts "\n是否需要修改版本信息?输入y/Y确认,其他键直接退出:" flush stdout set modify_confirm [string trim [gets stdin]] if {$modify_confirm ni {y Y}} { exit 0 } puts "请选择修改类型:输入1修改AA_version,输入2修改BB_version:" flush stdout set modify_type [string trim [gets stdin]] if {$modify_type ni {1 2}} { puts "输入无效,退出修改" exit 1 } puts "请输入新的版本号:" flush stdout set new_version [string trim [gets stdin]] # 更新数组中的版本值 if {$modify_type == 1} { lset version_map($target_process) 0 $new_version } else { lset version_map($target_process) 1 $new_version } # 将更新后的内容写回原文件,保留原有格式对齐 set fp [open "tool_version" w] puts $fp $header foreach p [array names version_map] { set aa [lindex $version_map($p) 0] set bb [lindex $version_map($p) 1] puts $fp [format " %-6s %-18s %s" $p $aa $bb] } close $fp puts "版本信息已更新成功!"
使用说明
- 运行脚本:
tclsh get_tool_version.tcl - 按照提示输入工艺名称即可查询对应AA、BB版本
- 确认修改后按照提示选择修改的版本类型,输入新版本号即可自动更新文件
注意:如果你的版本存储文件名不是tool_version,请修改脚本中open命令对应的文件名参数。
内容的提问来源于stack exchange,提问作者tongtong
相关产品推荐
相关产品推荐

