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

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

Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
в принципе то же самое, только у тебя для одного символа
Да нет вроде... (для этого там и плюсик ) - Я понял что ты имел в виду - если в качестве символа задана серия разных символов, то в моём случае только первое вхождение будет заменено...
Но и с ствоим методом есть небольшая проблема:

Код: Выделить весь код
$Char = '\t'

$Char = StringRegExpReplace($Char, '([][{}()|.?+*\\^])', '\\\1')
$Ret = StringRegExpReplace("\\test", '(?i)^[' & $Char & ']+([^' & $Char & '])', '\1')

ConsoleWrite($Ret)
Т.е под символ \ подставляется ещё один такой символ (для его отмены), и тогда неверно возвращается (должно в этом случае вернуться исходное значение - без изменении, так как в начале не найдено вхождение \t).



Вот функция (для чего вообще мне и требовалось сия опция), позволяет стриппить (обножать) определённый(е) символ(ы):

Код: Выделить весь код
;=======================================
;$Flag = 0 (или любое значение кроме 1,2, и 3) - обычная замена всех вхождении заданного символа
;$Flag = 1 - убирание заданного символа в начале $String
;$Flag = 2 - убирание заданного символа в конце $String
;$Flag = 3 - убирание заданного символа в начале и в конце $String
;
;$ReplaceAll = 0 (по умолчанию) - заменяется только первое вхождение заданного(ных) символа(ов)
;$ReplaceAll = 0 - заменяются все вхождения символов с заданой стороны (в зависимости от значения $Flag)
;=======================================
Func _StringStripChars($String, $Char, $Flag=0, $ReplaceAll=0)
    If StringLen($String) = 0 Or Not StringInStr($String, $Char) Then Return SetError(1, 0, $String)
    Local $Patern, $RetStr = $String
    $Char = StringRegExpReplace($Char, '([][{}()|.?+*\\^])', '\\\1')
    Switch $Flag
        Case 1
            $Patern = '(?i)\A' & $Char
            If $ReplaceAll = 1 Then $Patern = '(?i)\A' & $Char & '+'
            $RetStr = StringRegExpReplace($String, $Patern, '')
            Return $RetStr
        Case 2
            $Patern = '(?i)' & $Char & '\z'
            If $ReplaceAll = 1 Then $Patern = '(?i)' & $Char & '+\z'
            $RetStr = StringRegExpReplace($String, $Patern, '')
            Return $RetStr
        Case 3
            $Patern = '(?i)\A' & $Char & '|' & $Char & '\z'
            If $ReplaceAll = 1 Then $Patern = '(?i)\A' & $Char & '+|' & $Char & '+\z'
            $RetStr = StringRegExpReplace($String, $Patern, '')
            Return $RetStr
        Case Else
            $String = StringReplace($String, $Char, '')
            Return SetError(0, @extended, $String)
    EndSwitch
    Return SetError(2, 0, $String)
EndFunc
В этой функции хотелось бы реализовать ещё одну тему - чтобы в качестве $ReplaceAll можно было задать параметр для указания того, сколько символов следует убирать. Т.е если передать к примеру 3, тогда только три первых(/последних/с обоих сторон) символа (заданных через $Char) будут убираться, если же оставить этот параметр по умолчанию (0), то чтобы убирался только первый символ, для убирания всех начальных/конечных символов, задавать -1.
Это конечно можно сделать проверкой длины и т.п... но хотелось именно средствами RegExp...

Цитата:
исправил
Что-то я если честно запутался уже - где следует использовать функцию _MyFSFCallbackProc(), а где _FileSFCallbackProc()

Цитата:
у меня вроде без тормозов
Это при использовании флага $BIF_BROWSEINCLUDEFILES? без него всё нормально.

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

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

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, 06-08-2007 в 09:30.


Отправлено: 08:57, 06-08-2007 | #233