У меня есть имя пути, которое использует обратные косые черты в качестве разделителей и заканчивается обратной косой чертой в ячейке B5
, например, \\stack\over\flow\
. Я хотел бы сократить его до \\stack\over\
. Мне нужна формула для удаления последнего \
и дочернего компонента пути из моего полного пути.
решение1
В ячейке C5 введите формулу:
=REPLACE(B5,FIND("@",SUBSTITUTE(B5,"\","@",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1))+1,99,"")
решение2
Опираясь наответ bosco_yip, упрощая и объясняя это:
=LEFT(B5,FIND("|",SUBSTITUTE(B5,"\","|",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1)))
SUBSTITUTE(B5,"\","")
удаляет все обратные косые чертыB5
(заменяя их пустыми строками). Так, например, еслиB5
is\\stack\over\flow\
, это будетstackoverflow
.LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))
— это распространенный прием для подсчета количества обратных косых черт вB5
. Мы вычитаем из этого 1, чтобы получить номер предпоследней обратной косой черты.SUBSTITUTE(B5,"\","|", <the above> )
заменяет предпоследнюю обратную косую черту на|
(вертикальную черту).FIND("|", <the above> )
находитпозиция, который|
(предположительно / надеюсь) был предпоследним обратным слешем. Естественно, здесь будет проблема, еслиB5
уже содержит какие-либо вертикальные черты, но учтите, что это|
не допускается в именах путей Windows. (В отличие от этого,@
являетсядопустимый символ имени файла Windows.)LEFT(B5, <the above> )
получает значение отB5
(включительно) до предпоследнего обратного слеша.
Обратите внимание, что если B5
содержит только один \
(например, \
, foo\bar
или \Program Files
), то выше будет получена ошибка. Если B5
есть \\
или \\stack
, то результатом будет \
.
ответ bosco_yipведет себя так же.