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

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

Аватара для Creat0R

Must AutoIt


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

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


amel27
Цитата:
в 4-м есть неточность
Ты про то что в начале слешь остаётся? ну это так задуманно, но хотя да, нужно бы его убрать...

Цитата:
зачем дважды искать одно и тоже?.. (см. [6])
Ок, намёк понял (см. ниже поправлены вариант)...

Цитата:
какие еще ты предполагал разделители кроме '\' ?
Ну вообще то я считал что символ \ “позволяет” считать последующий после этого символ дословно, и если как разделитель будет задан один из служебных (для StringRegExpReplace()) символов, то это позволит не считать символ как служебны - это не так?
Просто путь может быть и как ссылка, тогда разделитель будет другой.

Цитата:
знаком с "бритвой Оккама"?
Неа

Цитата:
зачем последний цикл?
Чтобы проверить весь массив на пренадлежность НЕ замены, т.е если какой то элемент массива ровняется исходному пути, то я предполагаю что замена не осуществлялась, поэтому нужно опусташить этот элемент (это по мативам оригинальной функции _PathSplit() ).

Соответсвенно замечаниям немного переделал функцию :

Код: Выделить весь код
Func _PathSplitByRegExp($sPath, $pDelim="\")
    Local $RetArray[8], $iArr
    $pDelim = "\" & $pDelim
    $RetArray[0] = $sPath
    $RetArray[1] = StringRegExpReplace($sPath,  $pDelim & '.*', $pDelim) ;Drive letter
    $RetArray[2] = StringRegExpReplace($sPath, $pDelim & '[^' & $pDelim & ']*$', '') ;Path without FileName and extension
    $RetArray[3] = StringRegExpReplace($sPath, '\.[^.]*$', '') ;Full path without File Extension
      $RetArray[4] = StringRegExpReplace($sPath, '^.' & $pDelim & '*:.', '') ;Full path without drive letter
    $RetArray[5] = StringRegExpReplace($sPath, '^.*' & $pDelim, '') ;FileName and extension
    $RetArray[6] = StringRegExpReplace($RetArray[5], '\.[^.]*$', '') ;Just Filename
    $RetArray[7] = StringRegExpReplace($sPath, '^.*\.', '') ;Just Extension of a file
    ;Проверяем все значения (элементы массива), если в каком то из них небыла произведена замена, то присваеваем ему пустое значение ("")
    For $iArr = 1 To 7
        If $RetArray[$iArr] = $sPath Then $RetArray[$iArr] = ""
    Next
    Return $RetArray
EndFunc

Последний раз редактировалось Creat0R, 20-02-2007 в 15:39.


Отправлено: 15:33, 20-02-2007 | #222