Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

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

Googler


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

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


Creat0R
Цитата:
Странно, а чем отличается "-" от "/" ? »
упс, в скрипте была ошибка - в строках экранирования спецсимволов
Цитата:
А что если придерживаться условию, что все параметры будут иметь какой-то один разделитель? »
на коде это не отразится, хотя надежности прибавит - в параметре нужно передать только один символ
Цитата Creat0R:
$sParPrefix при этом равен "-". Но опять же, имя файл в таком случае обрубается »
изменил поиск следующего параметра по комбинации "пробел+префикс+символ"... НО если "-" будет без следующего пробела, то текст опять "обрубится" - в этом случае слово после "-" будет абсолютно неотличимо от параметра, единственный выход - брать этот текст в кавычки, заметь - это ограничение заложено тобой в постановку задачи
Цитата Creat0R:
Теперь что получается, нужно почти при каждом использовании RegExp, применять метод отмены спец. символов (\Q...\E)? »
это я для примера, в твоем случае это лишнее (в имени параметра спецсимволов "\" не бывает), \Q...\E можно тоже убрать
Код: Выделить весь код
If $CmdLine[0] = 0 Then $CmdLineRaw = '-Param=1 -XXX -File=C:\Program Files\Some App\File - Name.txt -URL=http://google.com'

MsgBox(64, "", _
    "Param: "& @TAB & _GetCmdLine($CmdLineRaw, "Param","-","=") & @LF & _
    "XXX: "  & @TAB & _GetCmdLine($CmdLineRaw, "XXX",  "-","=") & @LF & _
    "YYY: "  & @TAB & _GetCmdLine($CmdLineRaw, "YYY",  "-","=") & @LF & _
    "URL: "  & @TAB & _GetCmdLine($CmdLineRaw, "URL",  "-","=") & @LF & _
    "File: " & @TAB & _GetCmdLine($CmdLineRaw, "File", "-","="))

Func _GetCmdLine($sCmdLine, $sArg, $sPar="/", $sVal="=:")
    $sPar = "["& StringRegExpReplace ($sPar, "([-^\\])", "\\\1") & "]"
    $sVal = "["& StringRegExpReplace ($sVal, "([-^\\])", "\\\1") &" ]"
    $sArg  = "\Q"& $sArg &"\E"

    Local $sRegExp = '(?i)^(?:|.*?\s)'&$sPar&$sArg&$sVal&'+(?:$|'&$sPar&'|((?:"[^"]*"|[^"])+?)(?:$|\s'&$sPar&'\w)).*'
    Local $sRetCmd = StringRegExpReplace($sCmdLine, $sRegExp, '\1')

    If @extended Then Return $sRetCmd
    Return SetError(1, 0, "=NOT FOUND=")
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:53, 03-12-2008 | #1242