/pygments/samples/stdlib/GetAvailableFileName.ahk
http://github.com/tinku99/ahklexers · AutoHotKey · 111 lines · 85 code · 12 blank · 14 comment · 2 complexity · f4f529a4df1251c1ec5da6ec2d9a0b85 MD5 · raw file
- ; Get next/free Available File Name by toralf
- ; http://www.autohotkey.com/forum/viewtopic.php?t=6297
-
- GetAvailableFileName( GivenFileName, GivenPath = "", StartID = 1 )
- {
- ;check if GivenPath exist and add "\" if necessary
- If GivenPath is not space
- {
- StringRight, LastChar, GivenPath, 1
- If ( LastChar <> "\" )
- GivenPath = %GivenPath%\
- If ( InStr(FileExist(GivenPath), "D") = 0 )
- {
- ErrorLevel = The given path >%GivenPath%< doesn't exist.
- Return 0
- }
- }
-
- ;check if StartID is reasonable
- If ( StartID < 0 Or Mod(StartID, 1) <> 0 )
- {
- ErrorLevel =
- (LTrim
- The StartID >%StartID%< is smaller then zero or not an integer.
- It has to be a positive integer.
- )
- Return 0
- }
-
- ;split GivenFileName with #
- StringSplit, NameArray, GivenFileName, #
-
- ;if GivenFileName doesn't contain # ...
- If NameArray0 < 2
- {
- ;check if GivenFileName exists
- If FileExist(GivenPath . GivenFileName)
- {
- ErrorLevel =
- (LTrim
- The given file >%GivenFileName%< does exist
- in path >%GivenPath%<.
- (if path is empty, it's the path of the script/exe)
- )
- Return 0
- }
- Else
- Return GivenPath . GivenFileName
- }
-
- ;check if StartID isn't too large
- If ( StrLen(StartID) > NameArray0 - 1 )
- {
- ErrorLevel =
- (LTrim
- The StartID >%StartID%< is too large
- for the filename >%GivenFileName%<.
- )
- Return 0
- }
-
- ;Search from StartID ...
- Loop
- {
- Number := A_Index + StartID - 1
-
- ;untill number is too large ...
- If ( StrLen(Number) > NameArray0 - 1 )
- {
- ErrorLevel =
- (LTrim
- All files exist for >%GivenFileName%<
- with all # between %StartID% and %Number%.
- )
- Return 0
- }
-
- ;otherwise fill number with leading zeros
- Loop, % NameArray0 - 1 - StrLen(Number) ;%
- Number = 0%Number%
-
- ;split number in an array
- StringSplit, NumberArray, Number
-
- ;mix and concatenate the names array with the numbers array
- FileName =
- Loop, %NameArray0%
- FileName := FileName . NameArray%A_Index% . NumberArray%A_Index%
-
- ;check if GivenFileName doesn't exist
- If not FileExist(GivenPath . FileName)
- Return GivenPath . FileName
- }
- }
-
- GetAvailableFileName_fast( GivenFileName, GivenPath = "", StartID = 1 )
- {
- StringSplit, NameArray, GivenFileName, #
- Loop
- {
- Number := A_Index + StartID - 1
- Loop, % NameArray0 - 1 - StrLen(Number) ;%
- Number = 0%Number%
- StringSplit, NumberArray, Number
- FileName =
- Loop, %NameArray0%
- FileName := FileName . NameArray%A_Index% . NumberArray%A_Index%
- If not FileExist(GivenPath . FileName)
- Return GivenPath . FileName
- }
- }