我用下面的代码找到了一个文件夹中的所有.c文件,做相关的处理
foreach f [glob nocomplain "*.c"] {
if {[string compare $f "ew_code.c"] == 0} {
continue
}
regsub {\.c} $f {.o \\} newstr
puts $ifo $newstr
//如果是最后一个.c,则
//regsub {\.c} $f {.o} newstr
// puts $ifo $newstr
}
如何判断是最后一个.c文件
------解决方案--------------------------------------------------------
另外你这个问题的典型解决方案是join,而不是手动判断当前列表是不是在尾巴。
- Perl code
puts [join your-list " \\\n"]
------解决方案--------------------------------------------------------
Practical Programming in Tcl and Tk, Fourth Edition
Chapter 5. Tcl Lists
另外Tcl里的array不是平常我们说的数组,而是一个字典(也叫hashmap之类的)。
------解决方案--------------------------------------------------------
有一个比较简单的方法可以实现对最后一个匹配项的处理,设置一个变量,在循环中每个都给这个变量赋值,循环结束之后这个变量中的内容就是最后一个的值:
[code=Per]set laststr " "
foreach f [glob nocomplain "*.c "] {
if {[string compare $f "ew_code.c "] == 0} {
continue
}
regsub {\.c} $f {.o \\} newstr
puts $ifo $newstr
set laststr $newstr
}
if {$laststr != " "} {
# 最后一个.c的处理
puts $ifo $laststr
}[/code]