Что нового

Пользовательская функция даёт непонятные результаты на условии IF

Пётр325958

Новичок
Сообщения
10
Репутация
0
Добрый день, форум!
Прошу помощи по работе функции.
Есть скрипт, а в нём функция, проверяющая наличие файла с конкретным номером от 001 до 999 по шаблону типа [001]*.txt:
Код:
Func GetFileNumber()
For $i3 = 1 To 999 Step 1
$FileNumber = $i3
MsgBox($MB_SYSTEMMODAL, "", "1: " & $FileNumber)
If $FileNumber < 10 Then
$FileNumber = "00" & $FileNumber
EndIf
If $FileNumber > 9 And $FileNumber < 100 Then
$FileNumber = "0" & $FileNumber
EndIf
$File = $LogPath & $FileNumber & "-" & "*" & ".txt"
MsgBox($MB_SYSTEMMODAL, "", "2: " & $File)
If FileExists ($File) == 0 Then
MsgBox($MB_SYSTEMMODAL, "", "3: " & $FileNumber)
Return $FileNumber
ExitLoop
EndIf
Next
EndFunc ; GetFileNumber

$FileNumber объявлен Local в скрипте.
В указанной выше функции MsgBox вставлены мною только для контроля результатов в рамках отладки.
Так вот мне не понятно, почему "MsgBox 2:" выдаёт аж 3 нуля в номере, тогда как после сравнения "<10"
к номеру должны быть добавлены только два буферных нуля, а второе условие не выполняется и третий ноль
добавлен быть не может.
Пожалуйста, помогите разобраться!
 

ra4o

Скриптер
Сообщения
992
Репутация
183
А что у Вас в "$LogPath" ?
 

xXx

Меценат
Меценат
Сообщения
94
Репутация
28
Код:
GetFileNumber(@ScriptDir & '\')

Func GetFileNumber($LogPath)
	For $i3 = 1 To 999
		$FileNumber = StringFormat('%03s', $i3)
		$File = $LogPath & $FileNumber & "-*.txt"
		MsgBox($MB_SYSTEMMODAL, VarGetType($FileNumber), "2: " & $File)
		
		If Not FileExists($File) Then
			MsgBox($MB_SYSTEMMODAL, "", "3: " & $FileNumber)
			Return $FileNumber
		EndIf
	Next
EndFunc   ;==>GetFileNumber
 
Автор
П

Пётр325958

Новичок
Сообщения
10
Репутация
0
ra4o сказал(а):
А что у Вас в "$LogPath" ?
В $LogPath, например, "C:\Folder\" - ничего особенного.


Добавлено:
Сообщение автоматически объединено:

xXx сказал(а):
Спасибо большое за скрипт!
Вынул $LogPath из GetFileNumber($LogPath), получив GetFileNumber(), и тогда в моём скрипте всё заработало.
Но всё-таки хотел бы получить разъяснение того, что в моей функции неправильно,
почему сравнение в IF не даёт ожидаемого результата.
 

ra4o

Скриптер
Сообщения
992
Репутация
183
Скорее всего у Вас в переменной "$LogPath" и был тот самый лишний нолик, потому за неё и спрашивал.
А сравнение у Вас работает, как и должно работать, если Вы запустите свой вариант без этой переменной - получите такой же результат ( с двумя ноликами )
 
Автор
П

Пётр325958

Новичок
Сообщения
10
Репутация
0
ra4o сказал(а):
Скорее всего у Вас в переменной "$LogPath" и был тот самый лишний нолик,
При всём уважении к Вам, ra4o, лишний нолик в моей переменной "$LogPath"
никак не возможен. Уверяю Вас!
Он был бы неминуемо виден в строке
Код:
MsgBox($MB_SYSTEMMODAL, "", "2: " & $File)

. :smile:
 

xXx

Меценат
Меценат
Сообщения
94
Репутация
28
Пётр325958 сказал(а):
мне не понятно, почему "MsgBox 2:" выдаёт аж 3 нуля в номере
Пётр325958 сказал(а):
лишний нолик в моей переменной "$LogPath"
никак не возможен. Уверяю Вас!
Он был бы неминуемо виден в строке
Код:
MsgBox($MB_SYSTEMMODAL, "", "2: " & $File)
И чему тут верить?

Так или иначе если сделать так:
Код:
Global $LogPath = '\'
GetFileNumber()
Func GetFileNumber()
	For $i3 = 1 To 999 Step 1
		$FileNumber = $i3
		If $FileNumber < 10 Then $FileNumber = "00" & $FileNumber
		If $FileNumber > 9 And $FileNumber < 100 Then $FileNumber = "0" & $FileNumber
		$File = $LogPath & $FileNumber & "-" & "*" & ".txt"
		ConsoleWrite($File & @LF)
	Next
EndFunc   ;==>GetFileNumber
а затем заглянуть в консоль, то косяков там не увидите.
Вывод: причины нужно искать не в функции, а в ее окружении.
 
Верх