Нахождение строки в середине пути - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь найти строку в середине пути.У меня возникают проблемы с «нахождением» обратных косых черт после двух обратных косых черт.

Приведенные ниже две формулы дают мне одинаковое число.Я полагаю, что это потому, что после второго обратного слеша он пропускает «+1», поэтому третий начинает снова считать на втором.

Как можно увеличить следующий «обратный слэш» в порядкечтобы получить доступ к деталям дальше по пути?

\path1\path2\path3\path4\path5

=FIND("\";A2;FIND("\";A2; FIND("\"; A2; FIND("\"; A2)+1)))

Это начинается с 'path2'.

=FIND("\";A2;FIND("\";A2; FIND("\"; A2; FIND("\"; A2; FIND("\";A2)+1))))

Это также дает мне 'path2'.

Есть ли способ выбрать части пути на основе обратной косой черты с помощью FIND()?

Ответы [ 4 ]

2 голосов
/ 14 марта 2019

Ваши формулы (обе) уменьшаются до

2nd \    =FIND("\",A2,FIND("\",A2)+1)

Если вы хотите перейти к «следующему» обратному слешу, вам нужно +1 каждое начальное положение в цикле.

Если вы используете FIND, гораздо проще использовать SUBSTITUTE, чтобы заменить желаемый \ уникальным символом, а затем FIND этот символ.

Но еще проще было бы разделитьстрока в массив, а затем вернуть соответствующий элемент массива.

В Excel 2016 у вас есть функция FILTERXML, которая может легко сделать это:

=INDEX(FILTERXML("<t><s>" & SUBSTITUTE(A2,"\","</s><s>") & "</s></t>","//s"),3)

Обратите внимание, что, поскольку ваша строка начинается с \, индекс для требуемого элемента будет n+1, а не n (т. Е. 3 вернет path2)

И тамЕсть и другие способы сделать это для более ранних версий Excel.

0 голосов
/ 14 марта 2019

Скажите, А1 содержит:

мусор \ gjgherhg \ 3876iseugf \ hviu4t \ 5432 \ happy \ sad

, поэтому есть некоторый мусор до первый обратный слешВ A2 введите:

=TRIM(MID(SUBSTITUTE($A$1,"\",REPT(" ",999)),ROWS($1:1)*999-998,999))

и скопируйте вниз:

enter image description here

Если вы заинтересованы в специфическая деталь, используйте подходящую замену ROWS().Таким образом, чтобы получить третий элемент, используйте:

=TRIM(MID(SUBSTITUTE($A$1,"\",REPT(" ",999)),3*999-998,999))

ПРИМЕЧАНИЕ:

Если до первой обратной косой черты нет "мусора",вы получите бланкПоэтому, если вы знаете, что «мусора» нет, и хотите получить path1 , используйте:

=TRIM(MID(SUBSTITUTE($A$1,"\",REPT(" ",999)),2*999-998,999))

и т. Д.Если вам нужны только позиции обратной косой черты , вы можете использовать SUBSTITUTE().Чтобы получить положение второго обратного слеша, используйте:

=FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),2))
0 голосов
/ 14 марта 2019

Замените каждый обратный слеш строкой пробелов, равной длине исходной строки, затем выберите нужный фрагмент.

=TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*1, LEN(A2)))    '<- path1
=TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*2, LEN(A2)))    '<- path2
=TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*3, LEN(A2)))    '<- path3
=TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*4, LEN(A2)))    '<- path4
=TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*5, LEN(A2)))    '<- path5

'alternates for first and last
=TRIM(LEFT(SUBSTITUTE(MID(A2, 2, LEN(A2)), "\", REPT(" ", LEN(A2))), LEN(A2)))    '<- path1
=TRIM(RIGHT(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)))    '<- path5
0 голосов
/ 14 марта 2019

Вы можете попробовать:

  1. Импорт в A1 строки "path1 \ path2 \ path3 \ path4 \ path5" - Удалить первое "\"
  2. Выберите ячейку A1
  3. Перейти на вкладку «Данные» - «Инструменты данных» - «Текст в столбцы»
  4. Выбрать с разделителями - Далее
  5. Другой конец импорта "\" - Далее
  6. Конец
...