Что нового

Не правильно работает скрипт (ini + If...Else...EndIf)

ProNTSOFT

Новичок
Сообщения
7
Репутация
1
Думаю поймете, как должно работать.
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

If FileExists(@ScriptDir & "\settings.ini") Then ; если файл существует, то...
   $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
   $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
Else ; если файл не существует, то...
   IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
   IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
   $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
   $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
   Global $String1 = StringIsDigit($Ini1) ; проверяет наличие в строке только цифр (0-9).
   Global $String2 = StringIsDigit($Ini2) ; проверяет наличие в строке только цифр (0-9).
   
   If $String1 = 1 Then ; если в строке только цифры (0-9), то...
	  
	  If Not 50 <= $Ini1 <= 300 Then ; если строка $Ini1 НЕ: 1) Меньше или равна 50; 2) Меньше или равна 300, то...
		 IniDelete("settings.ini", "BotFish", "1") ; удаляет параметр в ini.
		 IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
		 $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
		 $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
	  EndIf
	  
	  Else ; если в строке НЕ только цифры (0-9), то...
		 IniDelete("settings.ini", "BotFish", "1") ; удаляет параметр в ini.
		 IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
		 $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
		 $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
   EndIf
   
   If $String2 = 1 Then ; если в строке только цифры (0-9), то...
	  If Not 0 <= $Ini1 <= 100 Then ; если строка $Ini1 НЕ: 1) Меньше или равна 0; 2) Меньше или равна 100, то...
		 IniDelete("settings.ini", "BotFish", "2") ; удаляет параметр в ini.
		 IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
		 $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
		 $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
	  EndIf
   Else ; если в строке НЕ только цифры (0-9), то...
	  IniDelete("settings.ini", "BotFish", "2") ; удаляет параметр в ini.
	  IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
	  $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
	  $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
   EndIf
EndIf

$Form1 = GUICreate("", 438, 342)
$Input1 = GUICtrlCreateInput($Ini1, 256, 21, 41, 21, $ES_READONLY)
$Updown1 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 300, 50)
$Input2 = GUICtrlCreateInput($Ini2, 256, 45, 41, 21, $ES_READONLY)
$Updown2 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 100)
GUISetState(@SW_SHOW)

While 1
   $nMsg = GUIGetMsg()
   
   Switch $nMsg
	  Case -3
		 Exit
   EndSwitch
WEnd
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
If FileExists(@ScriptDir & "\settings.ini") Then ; если файл существует, то...
   $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
   $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
Else ; если файл не существует, то...
   IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
   IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
   $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
   $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
EndIf

Global $String1 = StringIsDigit($Ini1) ; проверяет наличие в строке только цифр (0-9).
Global $String2 = StringIsDigit($Ini2) ; проверяет наличие в строке только цифр (0-9).
   
If $String1 = 1 Then ; если в строке только цифры (0-9), то...
   If Not 50 <= $Ini1 <= 300 Then ; если строка $Ini1 НЕ: 1) Меньше или равна 50; 2) Меньше или равна 300, то...
      IniDelete("settings.ini", "BotFish", "1") ; удаляет параметр в ini.
      IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
      $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
      $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2. 
   EndIf     
Else ; если в строке НЕ только цифры (0-9), то...
   IniDelete("settings.ini", "BotFish", "1") ; удаляет параметр в ini.
   IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
   $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
   $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
EndIf
   
If $String2 = 1 Then ; если в строке только цифры (0-9), то...
   If Not 0 <= $Ini1 <= 100 Then ; если строка $Ini1 НЕ: 1) Меньше или равна 0; 2) Меньше или равна 100, то...
      IniDelete("settings.ini", "BotFish", "2") ; удаляет параметр в ini.
      IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
      $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
      $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
   EndIf
Else ; если в строке НЕ только цифры (0-9), то...
   IniDelete("settings.ini", "BotFish", "2") ; удаляет параметр в ini.
   IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
   $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
   $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
EndIf

$Form1 = GUICreate("", 438, 342)
$Input1 = GUICtrlCreateInput($Ini1, 256, 21, 41, 21, $ES_READONLY)
$Updown1 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 300, 50)
$Input2 = GUICtrlCreateInput($Ini2, 256, 45, 41, 21, $ES_READONLY)
$Updown2 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 100)
GUISetState(@SW_SHOW)

While 1
   $nMsg = GUIGetMsg()
   
   Switch $nMsg
      Case -3
         Exit
   EndSwitch
WEnd


Если я вас правильно понял.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

If FileExists(@ScriptDir & "\settings.ini") Then ; если файл существует, то...
   $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
   $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
Else ; если файл не существует, то...
   IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
   IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
   $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
   $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
   Global $String1 = StringIsDigit($Ini1) ; проверяет наличие в строке только цифр (0-9).
   Global $String2 = StringIsDigit($Ini2) ; проверяет наличие в строке только цифр (0-9).
   
   If $String1 = 1 Then ; если в строке только цифры (0-9), то...
      
      If $Ini1 > 50 And $Ini1 <= 300 Then ; если строка $Ini1 НЕ: 1) Меньше или равна 50; 2) Меньше или равна 300, то...
         IniDelete("settings.ini", "BotFish", "1") ; удаляет параметр в ini.
         IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
         $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
         $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
      EndIf
      Else ; если в строке НЕ только цифры (0-9), то...
         IniDelete("settings.ini", "BotFish", "1") ; удаляет параметр в ini.
         IniWrite("settings.ini", "BotFish", "1", "150") ; записывает значение в ini.
         $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
         $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
   EndIf
   
   If $String2 = 1 Then ; если в строке только цифры (0-9), то...
      If $Ini1 > 0 And $Ini1 <= 100 Then ; если строка $Ini1 НЕ: 1) Меньше или равна 0; 2) Меньше или равна 100, то...
         IniDelete("settings.ini", "BotFish", "2") ; удаляет параметр в ini.
         IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
         $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
         $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
      EndIf
   Else ; если в строке НЕ только цифры (0-9), то...
      IniDelete("settings.ini", "BotFish", "2") ; удаляет параметр в ini.
      IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.
      $Ini1 = IniRead("settings.ini", "BotFish", "1", "") ; считывает значение в переменную $Ini1.
      $Ini2 = IniRead("settings.ini", "BotFish", "2", "") ; считывает значение в переменную $Ini2.
   EndIf
EndIf

$Form1 = GUICreate("", 438, 342)
$Input1 = GUICtrlCreateInput($Ini1, 256, 21, 41, 21, $ES_READONLY)
$Updown1 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 300, 50)
$Input2 = GUICtrlCreateInput($Ini2, 256, 45, 41, 21, $ES_READONLY)
$Updown2 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 100)
GUISetState(@SW_SHOW)

While 1
   $nMsg = GUIGetMsg()
   
   Switch $nMsg
      Case -3
         Exit
   EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
ProNTSOFT
Not 50 <= $Ini1 <= 300 - такой формы быть не может. Даже на Си нет такого сравнения. Оператор Not имеет наивысший приоритет, сначала он перевернёт число 50 в False, а потом начнётся сравнение.
Структура неправильна. Сначала если не существует, то создаём INI-файл, а потом читаем. То есть читаем всегда, а создаём если не существует. Отсюда вывод: нет смысла писать два раза чтение и при существовании и при не существовании.

Код:
IniDelete("settings.ini", "BotFish", "2") ; удаляет параметр в ini.
IniWrite("settings.ini", "BotFish", "2", "0") ; записывает значение в ini.

Зачем удалять потом создавать? Не проще ли просто перезаписать? Первая строка бессмысленна.

Примерно так... странно что $Ini1 в обоих условиях, наверно имелось ввиду $Ini2
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

$ini = @ScriptDir & "\settings.ini"
 ; если файл не существует, то... записывает значения в ini.
If Not FileExists($ini) Then IniWriteSection($Ini, "BotFish", "1=150" & @LF & "2=0")

; теперь уже существует, если не CD-диск
$Ini1 = IniRead($ini, "BotFish", "1", "") ; считывает значение в переменную $Ini1.
$Ini2 = IniRead($ini, "BotFish", "2", "") ; считывает значение в переменную $Ini2.

If StringIsDigit($Ini1) Then ; если в строке только цифры (0-9), то...
	If $Ini1 < 50 Or $Ini1 > 300 Then IniWrite($ini, "BotFish", "1", "150") ; записывает значение в ini.
Else ; если в строке НЕ только цифры (0-9), то...
	IniWrite($ini, "BotFish", "1", "150") ; записывает значение в ini.
EndIf

If StringIsDigit($Ini2) Then ; если в строке только цифры (0-9), то...
	If $Ini2 < 0 Or $Ini2 > 100 Then IniWrite($ini, "BotFish", "2", "0") ; записывает значение в ini.
Else ; если в строке НЕ только цифры (0-9), то...
	IniWrite($ini, "BotFish", "2", "0") ; записывает значение в ini.
EndIf

$Form1 = GUICreate("", 438, 342)
$Input1 = GUICtrlCreateInput($Ini1, 256, 21, 41, 21, $ES_READONLY)
$Updown1 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 300, 50)
$Input2 = GUICtrlCreateInput($Ini2, 256, 45, 41, 21, $ES_READONLY)
$Updown2 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 100)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()

	Switch $nMsg
		Case -3
			Exit
	EndSwitch
WEnd

а я бы написал так
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

$ini = @ScriptDir & "\settings.ini"
 ; если файл не существует, то... записывает значения в ini.
If Not FileExists($ini) Then IniWriteSection($Ini, "BotFish", "1=150" & @LF & "2=0")

; теперь уже существует, если не CD-диск
; считывает значения в переменные и преобразует в число
$Ini1 = Number(IniRead($ini, "BotFish", "1", "150")) ; сразу указываем умолчальные значения, если INI на CD и не был создан.
$Ini2 = Number(IniRead($ini, "BotFish", "2", "0"))

; Значения не в диапазоне 50-300, то переписываем ini
If $Ini1 < 50 Or $Ini1 > 300 Then IniWrite($ini, "BotFish", "1", "150")

; Значения не в диапазоне 0-100, то переписываем ini.
If $Ini2 < 0 Or $Ini2 > 100 Then IniWrite($ini, "BotFish", "2", "0")

$Form1 = GUICreate("", 438, 342)
$Input1 = GUICtrlCreateInput($Ini1, 256, 21, 41, 21, $ES_READONLY)
$Updown1 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 300, 50)
$Input2 = GUICtrlCreateInput($Ini2, 256, 45, 41, 21, $ES_READONLY)
$Updown2 = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-2, 100)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()

	Switch $nMsg
		Case -3
			Exit
	EndSwitch
WEnd
Объясняю логику. Главное чтобы программе подали валидные данные. Если кто-то вручную будет писать невалидные данные, функция Number всё равно их превратит в число. Если они буквы, то будет 0. В итоге остаётся проверить диапазон. Кратко и практично.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ProNTSOFT
Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Не правильно работает скрипт (ini + If...Else...EndIf)" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Администратор.
 
Верх