如何在TCL读取文件时实现每行输出数值递增2的需求?
实现读取文件时每行数值递增2的Tcl脚本修正
输入文件(input.txt)内容
green yellow grey purple
原脚本问题
原脚本存在语法错误(expr表达式括号不匹配、逻辑混乱),且未实现读取行输出、数值递增的核心逻辑:
set infile [open "input.txt" r] set x1 0 set y1 0 set x2 100 set y2 100 while {[gets $infile line] >=0} { puts " $x1 [expr {$y1+2}[ [expr {$x2+0.124}] [expr {$y2+2} +0.124]" }
期望输出
green 0 2 0.124 2.124 yellow 0 4.0 0.124 4.124 grey 0 6.0 0.124 6.124 purple 0 8.0 0.124 8.124
修正后的脚本
set infile [open "input.txt" r] set base_val 0 while {[gets $infile line] >= 0} { # 输出读取到的行内容 puts $line # 计算当前递增后的数值 set current_y [expr {$base_val + 2}] set fourth_num [expr {$current_y + 0.124}] # 输出数值行 puts "0 $current_y 0.124 $fourth_num" # 更新基准值,实现下一行递增2 set base_val $current_y } close $infile ;# 关闭文件释放资源
说明
- 修复了原脚本
expr的语法错误,确保表达式格式合法; - 每次循环先输出读取到的文件行,匹配期望输出的结构;
- 通过
base_val变量维护递增基准,初始为0,每次循环更新为当前计算值,实现每行数值递加2的效果; - 数值逻辑完全匹配期望输出:第一、第三个数固定为0和0.124,第二个数每次加2,第四个数为第二个数加0.124;
- 补充文件关闭操作,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

