Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Так пойдёт:

Код: Выделить весь код
Dim $aLines[9] = _
    [ _
        'when haveoverpair and (hand=99 or hand=44) and totalinvested > 120% stacksize raisemax force', _
        'when not BotRaisedBeforeFlop and bets=1 and raises>0', _
        'when (havestraightflush or havequads ) raisemax force', _
        'when tripsonboard and NutFullHouseOrFourOfAKind=0 fold force', _
        'when tripsonboard and NutFullHouseOrFourOfAKind>3 fold force', _
        'when (havefullhouse or haveflush or havestraight or haveset) raisemax force', _
        'when havetrips and HaveBestKicker raisemax force', _
        'when haveoverpair and (hand=AA or hand=KK) raisemax force', _
        'when (haveflushdraw or havestraightdraw) and overcards>0 raisemax force' _
    ]

For $sLine In $aLines
    ConsoleWrite("===================================" & @LF & _AutoItParseLine($sLine) & @LF)
Next

Func _AutoItParseLine($sLine)
    Local $sOperators, $aLine, $aVars, $sRet

    $sOperators = 'and|or|not'

    ;Разделяем строку на две части. 1-ая это вся строка без двух последних переменных (на конце), а 2-ая это и есть последние две переменные (см. далее)
    $aLine = StringRegExp($sLine, '(?i)(.*?)(?: ([a-z_]+ [a-z_]+))?$', 3)

    ;Получаем все переменные в массив (! переменные не могут содержать числа)
    $aVars = StringRegExp($aLine[0], '(?i)([a-z_]+)', 3)

    ;Парсируем проценты (120%)
    $aLine[0] = StringRegExpReplace($aLine[0], '(\d+)% ([a-z_]+)', '(\2 / 100 * \1)')

    ;Парсируем первую переменную, присваиваем ей всё остальное выражение ("$when = ")
    $aLine[0] = StringRegExpReplace($aLine[0], '(?i)^(when )', '$\1= ')

    ;Оперделяем строку возврата (эта строка уже обрезана, и не содержит двух последних переменных)
    $sRet = $aLine[0]

    ;Если строка содержит на конце две переменные...
    If $aLine[1] <> '' Then
        ;Добавляем эти переменные в перевёрнутом порядке на новую строку
        $sRet &= @CRLF & StringRegExpReplace($aLine[1], '([a-z_]+) ([a-z_]+)$', "$\2 = '\1'")
    EndIf

    ;Проходимся по массиву переменных...
    For $sVar In $aVars
        ;Если это не оператор...
        If Not StringRegExp($sVar, '(?i)^(' & $sOperators & ')$') Then
            ;Добавляем к имени переменной символ $
            $sRet = StringRegExpReplace($sRet, '\b(?<!\$)' & $sVar & '\b', '$' & $sVar, 1)
        EndIf
    Next

    ;Возвращаем полученную строку
    Return $sRet
EndFunc
?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 16-06-2011 в 10:02. Причина: Поправил код, + добавил комментарий

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:02, 16-06-2011 | #2