Автор Тема: Пользовательская функция даёт непонятные результаты на условии IF  (Прочитано 157 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Пётр325958 [?]

  • Новичок
  • *
  • Сообщений: 3
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Добрый день, форум!
Прошу помощи по работе функции.
Есть скрипт, а в нём функция, проверяющая наличие файла с конкретным номером от 001 до 999 по шаблону типа [001]*.txt:
Код: AutoIt [Выделить]
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"
к номеру должны быть добавлены только два буферных нуля, а второе условие не выполняется и третий ноль
добавлен быть не может.
Пожалуйста, помогите разобраться!

Русское сообщество AutoIt


Оффлайн ra4o [?]

  • Скриптер
  • ****
  • Сообщений: 830
  • Репутация: 149
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
А что у Вас в "$LogPath" ?

Помечен как лучший ответ пользователем Пётр325958 Отправлен Декабрь 09, 2018, 01:47:37

Оффлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 42
  • Репутация: 11
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Код: AutoIt [Выделить]
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 [?]

  • Новичок
  • *
  • Сообщений: 3

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
А что у Вас в "$LogPath" ?
В $LogPath, например, "C:\Folder\" - ничего особенного.


Добавлено: Декабрь 09, 2018, 01:55:28
...
Спасибо большое за скрипт!
Вынул $LogPath из GetFileNumber($LogPath), получив GetFileNumber(), и тогда в моём скрипте всё заработало.
Но всё-таки хотел бы получить разъяснение того, что в моей функции неправильно,
почему сравнение в IF не даёт ожидаемого результата.
« Последнее редактирование: Декабрь 09, 2018, 01:55:28 от Пётр325958, Причина: Объединение сообщений »

Русское сообщество AutoIt


Оффлайн ra4o [?]

  • Скриптер
  • ****
  • Сообщений: 830
  • Репутация: 149
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Скорее всего у Вас в переменной "$LogPath" и был тот самый лишний нолик, потому за неё и спрашивал.
А сравнение у Вас работает, как и должно работать, если Вы запустите свой вариант без этой переменной - получите такой же результат ( с двумя ноликами )

Оффлайн Пётр325958 [?]

  • Новичок
  • *
  • Сообщений: 3

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

. :)

Оффлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 42
  • Репутация: 11
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
мне не понятно, почему "MsgBox 2:" выдаёт аж 3 нуля в номере
лишний нолик в моей переменной "$LogPath"
никак не возможен. Уверяю Вас!
Он был бы неминуемо виден в строке
Код: AutoIt [Выделить]
MsgBox($MB_SYSTEMMODAL, "", "2: " & $File)

И чему тут верить?

Так или иначе если сделать так:
(нажмите для показа/скрытия)
а затем заглянуть в консоль, то косяков там не увидите.
Вывод: причины нужно искать не в функции, а в ее окружении.
« Последнее редактирование: Декабрь 09, 2018, 14:34:41 от xXx »

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
13 Ответов
5890 Просмотров
Последний ответ Июль 20, 2010, 23:58:38
от CreatoR
0 Ответов
2091 Просмотров
Последний ответ Июнь 28, 2010, 14:50:01
от Yashied
1 Ответов
2133 Просмотров
Последний ответ Август 09, 2011, 21:03:31
от Gena
12 Ответов
4099 Просмотров
Последний ответ Октябрь 29, 2011, 12:51:59
от shakur
16 Ответов
3403 Просмотров
Последний ответ Март 08, 2013, 17:40:02
от ivsatel
5 Ответов
3051 Просмотров
Последний ответ Октябрь 30, 2013, 12:56:22
от Rivald
15 Ответов
5549 Просмотров
Последний ответ Ноябрь 25, 2013, 00:27:55
от Astel064
3 Ответов
1669 Просмотров
Последний ответ Январь 21, 2014, 13:12:20
от Garrett
1 Ответов
773 Просмотров
Последний ответ Июнь 28, 2015, 19:23:46
от k790
7 Ответов
2311 Просмотров
Последний ответ Ноябрь 26, 2015, 01:12:07
от Yura