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

String 递增存储为tcl字符串的整数值,string,tcl,String,Tcl,我必须实现一个特性,其中我有一个文件名,该文件名最后包含一些整数值,我想将该整数值增加1。更清楚地说,问题字符串文件名是: asdfasdfa.foo.old001 现在我必须检查这个文件名是否存在,如果存在,我必须将我的新文件命名为 asdfasdfa.foo.old002 等等。我可以想出一个解决方案,就是使用 文件扩展名字符串 命令,然后使用正则表达式获取最后三个字符并将“1”添加到其中,然后将文件名连接到此新扩展名。但我不确定这是否是一个好的最佳解决方案。任何其他想法或帮助都会很好。谢谢

我必须实现一个特性,其中我有一个文件名,该文件名最后包含一些整数值,我想将该整数值增加1。更清楚地说,问题字符串文件名是:

asdfasdfa.foo.old001

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

asdfasdfa.foo.old002

等等。我可以想出一个解决方案,就是使用

文件扩展名字符串

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

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"
和查找不存在的文件名:

set filename abcd.ext.old001
while {[file exists $filename]} {
    set filename [incr_filename $filename]
}
puts "new filename is $filename"
如果仍然使用regexp,为什么不捕获前缀,即使用集合匹配[regexp-inline{.*.\d+$}$name]?如果仍然使用regexp,为什么不捕获前缀,即使用集合匹配[regexp-inline{.*.\d+$}$name]?