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

  • Май 19, 2013, 07:57:53 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

Вы новичок? Хотите начать изучение AutoIt и не знаете с чего начать?

Для начала ознакомьтесь с темой Быстрый старт для работы с AutoIt.
Затем осмотрите раздел Инструменты и помощь по AutoIt.

Реклама

Автор Тема: преобразование строки в значение boolen  (Прочитано 1288 раз)

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

running-frag [?]

Допустим есть строка

Код: AutoIt [Выделить]
local $_string = "False"

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

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




  Записан
"Слушай всех, но делай по своему." (с)
"Что бы понять что написано в коде, нужно его переписать." (с)
"Нет ничего более постоянного, чем временное." (c)
"В нашей жизни, изменить можно всё... Кроме смерти." (с)

Big Boss Inform. отображение текущих координат, захват цвета

sngr [?]

  • AutoIt Гуру
  • *****
  • Репутация: 243
  • Online Online
  • Сообщений: 585
  • Версия AutoIt: 3.3.8.1
    • Награды
Цитата
Если вы используете булево значение в качестве строки, применяются следующие правила:
Булево значение True конвертируется в строковое значение "True"
Булево значение False конвертируется в строковое значение "False"
Вот что говорит справка.




  Записан

running-frag [?]

  • Продвинутый
  • ***

  • Автор темы
  • Репутация: 57
  • Offline Offline
  • Сообщений: 440
  • why me?
    • Награды
А что на счёт "наоброт"? String -> Bool

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

Ну само собой речь не идёт о простом варианте мол
Код: AutoIt [Выделить]
If $_string == "False" Then $_string = False
мы ведь не идём простыми путями. ;) Да и хочется узнать что может автоит в этом вопросе.




  Записан

---Zak--- [?]

  • Продвинутый
  • ***
  • Репутация: 57
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 235
  • Версия AutoIt: 3.3.8.1
  • Награды Первое место конкурса
    • Награды
А если написать что-нибудь свое ?
ЗЫ: понятно - свое не хочет...

Код: AutoIt [Выделить]
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 значениями.
Преобразовать строковое значение числа в численное.




  Записан
Версия: AutoIT v3.3.8.1
OS: WinXp SP3 (RUS)or(ENG)

running-frag [?]

  • Продвинутый
  • ***

  • Автор темы
  • Репутация: 57
  • Offline Offline
  • Сообщений: 440
  • why me?
    • Награды
Линк помог, там разкрываются
Код: AutoIt [Выделить]
А Bool нету что ли? :(




  Записан

sngr [?]

  • AutoIt Гуру
  • *****
  • Репутация: 243
  • Online Online
  • Сообщений: 585
  • Версия AutoIt: 3.3.8.1
    • Награды
Цитата
Если же вы используете строку в качестве булева значения, применяются другие правила:
Только пустая строка ("") соответствует булевому значению False
Любая другая строка (в том числе и "0", "False") соответствует булевому значению True





  Записан

running-frag [?]

  • Продвинутый
  • ***

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

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




  Записан

asdf8 [?]

  • Скриптер
  • ****
  • Репутация: 115
  • Offline Offline
  • Сообщений: 405
  • Версия AutoIt: 3.3.8.0
    • Награды
running-frag  [?]
Цитата
Поэтому я и интересуюсь может есть убермегасуперфункция.

Execute подойдет ?
Код: AutoIt [Выделить]
MsgBox(0, '', IsBool(Execute('False')))




  Записан

madmasles [?]

  • Глобальный модератор
  • *
  • *****
  • Репутация: 1833
  • Online Online
  • Пол: Мужской
  • Сообщений: 4712
  • Версия AutoIt: 3.3.8.1
    • Награды
running-frag,
Можно так попробовать.
Код: AutoIt [Выделить]
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

running-frag [?]

  • Продвинутый
  • ***

  • Автор темы
  • Репутация: 57
  • Offline Offline
  • Сообщений: 440
  • why me?
    • Награды
Код: AutoIt [Выделить]
Local $_string = Execute ("true")
ConsoleWrite ($_string)
По моему это и есть решение.  :whistle:

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




  Записан

AZJIO [?]

Цитата
Убермегасупер функция найдена
Попробуем разбить иллюзии.
Код: AutoIt [Выделить]
$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




  Записан

running-frag [?]

  • Продвинутый
  • ***

  • Автор темы
  • Репутация: 57
  • Offline Offline
  • Сообщений: 440
  • why me?
    • Награды
AZJIO  [?]
Цитата
Попробуем разбить иллюзии.
Не ну в дело "скорости выполнения" у нас не стояло. Но за инфу тоже спс.




  Записан

AZJIO [?]

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

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




  Записан

running-frag [?]

  • Продвинутый
  • ***

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

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

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

Т.е. получив ноль я понимаю что "косячит". И возможно даже почему. :ok:
« Последнее редактирование: Май 04, 2012, 23:08:46 от running-frag »



  Записан

Yashied [?]

  • Глобальный модератор
  • AutoIt MVP
  • *
  • *****
  • Репутация: 2296
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 4251
    • Награды
Можно ли как то преобразовать строку в булевской значение?

Код: AutoIt [Выделить]
$_string = "True"

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

$_string = ($_string = "True")

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




  Записан


Думай, прежде чем говорить.
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
[Данные, строки] Преобразование строки
AutoIt для новичков
snoitaleR 13 3107 Последний ответ Январь 09, 2010, 12:01:49
от gregaz
[Данные, строки] Преобразование данных из нескольких разных INI в один
AutoIt для новичков
AtoS 4 1608 Последний ответ Март 15, 2010, 00:50:07
от AtoS
[Данные, строки] Преобразование строки в нужный вид
AutoIt для новичков
invisible 12 2846 Последний ответ Июль 07, 2010, 21:18:25
от invisible
Вырезать значение из строки/текста
Регулярные выражения и прочее
Humanoid 2 2994 Последний ответ Февраль 13, 2011, 16:15:33
от Garrett
Получение переменной и её значение из строки
Регулярные выражения и прочее
Viktor1703 18 3520 Последний ответ Июнь 30, 2011, 18:42:09
от CreatoR
[Данные, строки] Преобразование строки с помощью регулярного выражения
Регулярные выражения и прочее
Math 1 767 Последний ответ Декабрь 30, 2011, 19:27:41
от madmasles
Перенесено: [Данные, строки] Преобразование строки с помощью регулярного выражения
AutoIt для новичков
Kaster 0 578 Последний ответ Декабрь 30, 2011, 22:37:28
от Kaster
[Данные, строки] Как сделать чтоб значение Sleep($t) постоянно менялось
AutoIt для новичков
general66 1 469 Последний ответ Июль 15, 2012, 18:34:23
от sngr
[Данные, строки] как Дописать значение параметра в ini фаил
AutoIt для новичков
general66 1 428 Последний ответ Август 04, 2012, 00:10:39
от XpycT
[преобразование] Преобразование строк в hex
AutoIt для новичков
dimid 6 1311 Последний ответ Март 23, 2013, 11:30:48
от dimid


Реклама

* Последние сообщения на форуме
post Re: [Сеть, интернет] Инициализация интернет-подключения через RasDial (API rasapi32.dll)
[AutoIt для новичков] AZJIO Сегодня в 06:27:54
post Re: [Сеть, интернет] Инициализация интернет-подключения через RasDial (API rasapi32.dll)
[AutoIt для новичков] madmasles Сегодня в 05:52:43
post Re: С днём рождения Hunter_ua, illja!
[Дни рождения] madmasles Сегодня в 05:45:34
post Re: Еще один Dll Viewer
[Примеры и рабочие проекты] joiner Сегодня в 05:33:21
post Re: Еще один Dll Viewer
[Примеры и рабочие проекты] AZJIO Сегодня в 04:02:01
post Re: Еще один Dll Viewer
[Примеры и рабочие проекты] erlik Сегодня в 03:39:08
post Re: Как организовать комплексное удаление тегов и ненужной инфы?
[Регулярные выражения и прочее] AZJIO Сегодня в 03:33:30
post Re: [Сеть, интернет] Инициализация интернет-подключения через RasDial (API rasapi32.dll)
[AutoIt для новичков] AZJIO Сегодня в 02:56:23
post Re: Как организовать комплексное удаление тегов и ненужной инфы?
[Регулярные выражения и прочее] hellm Сегодня в 02:51:57
post Re: Еще один Dll Viewer
[Примеры и рабочие проекты] joiner Сегодня в 02:19:11

* Пользователи онлайн
  • Dot Гостей: 82
  • Dot Скрыт: 0
  • Dot Пользователей: 7
  • Dot Пользователи Online: