Что нового

преобразование строки в значение boolen

running-frag

why me?
Сообщения
441
Репутация
60
Допустим есть строка

Код:
local $_string = "False"


Если мы посмотрим через VarGetType () то получим String (ну очевидные вещи).
Вопрос такой. Можно ли как то преобразовать строку в булевской значение? Т.е. что б строка стала действительно False (bool, а не оставалась string).

PS: Так же приемлемые варианты с Int значениями.
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Если вы используете булево значение в качестве строки, применяются следующие правила:
Булево значение True конвертируется в строковое значение "True"
Булево значение False конвертируется в строковое значение "False"
Вот что говорит справка.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
А что на счёт "наоброт"? String -> Bool

Если более наглядней выглядит это вот как
Код:
Local $_string = "False"
; преобразовать в 
Local $_string = False


Ну само собой речь не идёт о простом варианте мол
Код:
If $_string == "False" Then $_string = False

мы ведь не идём простыми путями. ;) Да и хочется узнать что может автоит в этом вопросе.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
А если написать что-нибудь свое ?
ЗЫ: понятно - свое не хочет...

Код:
local $_string = "False"

MsgBox(0, "", VarGetType(StrToBool($_string)))

Func StrToBool($str)
   If $str = "False" Then $str = False
   If $str = "True"  Then $str = True
   Return $str
EndFunc


PS: Так же приемлемые варианты с Int значениями.
http://autoit-script.ru/index.php?topic=6715.0
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Линк помог, там разкрываются
Код:
Number()
String ()

А Bool нету что ли? :(
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Если же вы используете строку в качестве булева значения, применяются другие правила:
Только пустая строка ("") соответствует булевому значению False
Любая другая строка (в том числе и "0", "False") соответствует булевому значению True
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
sngr [?]
Если же вы используете строку в качестве булева значения, применяются другие правила: Только пустая строка ("") соответствует булевому значению FalseЛюбая другая строка (в том числе и "0", "False") соответствует булевому значению True

Ну собсно ничего нового. :( "Так везде". :smile: Поэтому я и интересуюсь может есть убермегасуперфункция. :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
running-frag,
Можно так попробовать.
Код:
Dim $aTF[2] = ['true', 'FALSE']

For $i = 0 To 1
	If Not IsBool($aTF[$i]) Then
		$aTF[$i] = StringUpper(StringLeft($aTF[$i], 1)) & StringLower(StringTrimLeft($aTF[$i], 1))
		ConsoleWrite('До: ' & $aTF[$i] & @TAB & VarGetType($aTF[$i]) & @TAB & IsBool($aTF[$i]) & @LF)
		$aTF[$i] = ($aTF[$i] == True)
		ConsoleWrite('После: ' & $aTF[$i] & @TAB & VarGetType($aTF[$i]) & @TAB & IsBool($aTF[$i]) & @LF)
	EndIf
Next
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Код:
Local $_string = Execute ("true")
ConsoleWrite ($_string)

По моему это и есть решение. :whistle:

Всем спс. Вопрос решён. Убермегасупер функция найдена. :IL_AutoIt_1:
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Убермегасупер функция найдена
Попробуем разбить иллюзии.
Код:
$s = "False"

$timer = TimerInit()
For $i = 1 To 100000
	$s = Execute("true") ; 200 сек (выйгрышь в компактности, 21 символ)
Next
MsgBox(0, "Execute", 'Время : ' & Round(TimerDiff($timer), 2) & ' сек')

$timer = TimerInit()
For $i = 1 To 100000
	If $s = "False" Then $s = False ; наибыстрейший вариант 66 сек, строка 31 символ
Next
MsgBox(0, "If Then", 'Время : ' & Round(TimerDiff($timer), 2) & ' сек')

$timer = TimerInit()
For $i = 1 To 100000
	_StrToBul($s) ; инициализация функции создаёт весомую задержку 250 сек, 14 символов
Next
MsgBox(0, "_StrToBul", 'Время : ' & Round(TimerDiff($timer), 2) & ' сек')

Func _StrToBul(ByRef $s)
	If $s = "False" Then $s = False
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
running-frag
Откуда берётся строковое значение? Из ini-файла? Гораздо проще манимулировать 0 и 1, обрабатывается быстрее чем False или True (проверяется теми же методами). В реальности единственный раз, когда пришлось испольовать False/True в скрипте FileOperations.au3 в строке
Код:
StringInStr($sMask, '|' & StringTrimLeft($sFile, $iPos) & '|') = $fInclude
где $fInclude принадлежит False/True, а противоположное подвыражение может принимать числа от 0 и более и сравнивать с 0 и 1 не получится. В остальных случаях это используется как триггер "да" или "нет", соответственно использую 0 и 1.

Не ну в дело "скорости выполнения" у нас не стояло.
а в чём стояло? В догмах? Обязательно придерживаться формату вызова функции?
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
AZJIO [?]
а в чём стояло? В догмах? Обязательно придерживаться формату вызова функции?
Ну как это бывает "простые вещи сбивают с толку даже старичков". :smile: А для меня просто интересно как и чем пользуются знающие люди. Всё же, я далеко ещё до "уверенные пользователь автоит". Поэтому и такие вопросы.

Задача стояла увидеть как и чем пользуются "гуру". И собсно что и произошло, увидеть их мнение. :smile:

А по теме, не знаю как на счёт 0\1, но меня как минимум несколько раз спасало именно заданные True\False. Как это бывает "функция разтолстела до .... размеров". И мне она выдавала не мои долгожданные True\False а ноль. :smile: Конечно же "те же ... только в профиль", ну имхо, мне так понятней (логичнее). Хотя я только в автоит пользуюсь этим моментов. В PHP и Python там дела по другом обстоят. ;)

Т.е. получив ноль я понимаю что "косячит". И возможно даже почему. :ok:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
running-frag сказал(а):
Можно ли как то преобразовать строку в булевской значение?

Код:
$_string = "True"

ConsoleWrite($_string & " - " & VarGetType($_string) & @CR)

$_string = ($_string = "True")

ConsoleWrite($_string & " - " & VarGetType($_string) & @CR)
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Yashied
Код:
Local $_string = "false"

ConsoleWrite($_string & " - " & VarGetType($_string) & @CR)

$_string = ($_string = "false")

ConsoleWrite($_string & " - " & VarGetType($_string) & @CR)


Код:
false - String
True - Bool
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
Local $_string = "False"

ConsoleWrite($_string & " - " & VarGetType($_string) & @CR)

$_string = ($_string = "True")

ConsoleWrite($_string & " - " & VarGetType($_string) & @CR)
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
running-frag [?]
Вопрос такой. Можно ли как то преобразовать строку в булевской значение? Т.е. что б строка стала действительно False (bool, а не оставалась string).

Код:
Local $_string = "False"
; преобразовать в
Local $_string = False
 

ArtInt

Знающий
Сообщения
135
Репутация
18
running-frag, а просто if-then уже не катит? :whistle:

И код данный Yashied'ом работает верно -
"false" не равно "true", значит результат false
"true" равно "true", знаит результат true

Я бы ещё добавил преобразование строки в нижний регистр -
Код:
Local $_string = "False"

ConsoleWrite($_string & " - " & VarGetType($_string) & @CR)

$_string = (StringLower($_string) = "true")

ConsoleWrite($_string & " - " & VarGetType($_string) & @CR)


Хотя работать будет и без этого.
 
Верх