递增整数值存储为tcl字符串

时间:2012-11-05 14:48:39

标签: string tcl

我必须实现一个功能,其中我有一个文件名,并且该名称最后包含一些整数值,我想将该整数值递增一。更清楚的是,问题字符串“filename”是:

  

asdfasdfasdfa.foo.old001

现在我必须检查这个文件名是否存在,如果是,我必须将我的新文件命名为

  

asdfasdfasdfa.foo.old002

等等。我可以想到一个解决方案,即使用

获取最后一个字符串“.old001”
  

文件扩展名字符串

命令然后使用正则表达式获取最后三个字符并向其添加“1”,然后将文件名加入此新扩展名。但我不确定它是否是一个好的和最佳的解决方案。任何其他想法或帮助都会很棒。谢谢。

1 个答案:

答案 0 :(得分:4)

proc incr_filename {name} {
    set digits [regexp -inline {\d+$} $name]
    set prefix [string range $name 0 end-[string length $digits]]
    set num [scan $digits %d]  ;# prevents problems with invalid octal numbers 
    format "%s%0*d" $prefix [string length $digits] [incr num]
}

puts [incr_filename asdfasdfasdfa.foo.old001]

找到不存在的文件名:

set filename abcd.ext.old001
while {[file exists $filename]} {
    set filename [incr_filename $filename]
}
puts "new filename is $filename"