2012-11-05 66 views
1

我必須實現一個功能,其中我有一個文件名,該名稱包含一些整數值,我想增加一個整數值。爲了更清楚,這個問題字符串「文件名」是:遞增存儲爲tcl整數值字符串

asdfasdfasdfa.foo.old001

現在我要檢查,如果該文件名存在,如果它確實有我的名字我的新文件

asdfasdfasdfa.foo.old002

等。我能想到的一個解決方案是讓最後一個字符串」 .old001" 使用

文件擴展名字符串

命令,然後使用正則表達式獲得最後三個字符,並添加‘1’它然後將文件名稱加入到這個新擴展中。但我不確定它是否是一個很好的最佳解決方案。任何其他想法或幫助將是偉大的。謝謝。

回答

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] 

,並找到了不存在的文件名:如果使用`反正regexp`,爲什麼不抓住前綴,_i.e._使用`設置匹配[正則表達式-inline {(

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

。*?)(\ d +)$} $ name]'? –

+0

感謝Glenn的幫助。 –