Tengo un nombre de ruta que utiliza barras invertidas como delimitadores y termina con una barra invertida en la celda B5
, por ejemplo \\stack\over\flow\
,. Me gustaría reducirlo a \\stack\over\
. Necesito una fórmula para eliminar el último \
componente de la ruta secundaria de mi ruta completa.
Respuesta1
En C5, ingrese la fórmula:
=REPLACE(B5,FIND("@",SUBSTITUTE(B5,"\","@",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1))+1,99,"")
Respuesta2
Sobre la base deLa respuesta de bosco_yip, simplificándolo y explicándolo:
=LEFT(B5,FIND("|",SUBSTITUTE(B5,"\","|",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1)))
SUBSTITUTE(B5,"\","")
elimina todas las barras invertidasB5
(reemplazándolas con cadenas vacías). Entonces, por ejemplo, siB5
es\\stack\over\flow\
, esto seríastackoverflow
.LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))
es un truco común para contar el número de barras invertidas enB5
. Restamos 1 de eso para obtener el número de la penúltima barra invertida.SUBSTITUTE(B5,"\","|", <the above> )
reemplaza la penúltima barra invertida con una|
(barra vertical).FIND("|", <the above> )
encuentra elposicióndel|
, que (presumiblemente/con suerte) fue la penúltima barra invertida. Naturalmente, habrá un problema aquí siB5
ya contiene barras verticales, pero tenga en cuenta que eso|
no está permitido en las rutas de acceso de Windows. (Por el contrario,@
esun carácter de nombre de archivo de Windows válido).LEFT(B5, <the above> )
obtiene el valor deB5
hasta (e incluyendo) la penúltima barra invertida.
Tenga en cuenta que, si B5
contiene solo uno \
(por ejemplo \
, foo\bar
o \Program Files
), lo anterior generará un error. Si B5
es \\
o \\stack
, entonces el resultado será \
.
La respuesta de bosco_yipse comporta igual.