TCL while循环出现invalid bareword "string"报错如何解决
TCL PDB处理代码修复方案
报错直接原因
你当前遇到的invalid bareword "string"报错,是因为TCL中if语句的条件表达式属于运算上下文,调用string equal这类TCL命令时,必须用方括号[]包裹命令,否则解释器会将string识别为未定义的变量/裸词。
其他需修复的隐藏问题
你的代码还存在几个逻辑错误,同步修复后才能正常运行:
- 读取行的变量名不匹配:
gets $file1的结果赋值给了p1,但后续字符串操作全用了未定义的line变量 eof命令参数错误:eof接收的是文件句柄$file1,而非行内容变量- 循环控制变量
x未初始化,进入循环前需要先赋值为0 - 缺少
gets读取成功判断,避免读取到空行或文件末尾时的无效操作
修复后的完整代码
cd c:/users/john/desktop set file1 [open 1n5u.pdb r] set file2 [open alpha.pdb w] # 初始化循环控制变量 set x 0 while {$x == 0} { # 读取行内容赋值给line变量 set read_len [gets $file1 line] # 判断是否读到文件末尾 if {$read_len == -1} { set x 1 break } set length1 [string range $line 0 3] set length2 [string range $line 14 15] set length3 [string index $line 78] # 命令调用加方括号包裹 if {[string equal $length1 "ATOM"] && [string equal $length2 "CA"] && [string equal $length3 "C"]} { puts $file2 $line } set x [eof $file1] } close $file1 close $file2
内容的提问来源于stack exchange,提问作者iman j
相关产品推荐
相关产品推荐

