Доброго дня. Подскажите пжлста формулу для поиска слова от последнего пробела назад Вот строка: X: 2. КОНСТРУКТОРСКАЯ документация 2. Изделия 57. Шкафы индивидуальной разработки Детали 735312 Двери 735312.021-v1 Дверь.SLDPRT Вот слово, которое должно найти. Спасибо большое!
Доброго дня. Подскажите пжлста формулу для поиска слова от последнего пробела назад Вот строка: X: 2. КОНСТРУКТОРСКАЯ документация 2. Изделия 57. Шкафы индивидуальной разработки Детали 735312 Двери 735312.021-v1 Дверь.SLDPRT Вот слово, которое должно найти. Спасибо большое!valermihali4
[/vba] Формула предполагает, что эта строка не должна быть длиннее 100 символов. Если вдруг надо больше, то тогда настраиваем константы 100 и 200Gustav
В "Личных сообщениях" поступила просьба расшифровать смысл констант "100" и "200". Подумалось, что интересно будет многим - поэтому и отвечаю здесь.
Главная идея в набивании в строку кучи дополнительных пробелов заключается в том, что строка приобретает такой вид, когда деление строки на нужные части будет происходить безболезненно, в месте скопления многих пробелов, без риска потери значимых символов или слов. После выполнения нужного деления строки все лишние пробелы из образовавшихся подстрок легко удаляются при помощи функции СЖПРОБЕЛЫ.
Чтобы данный механизм отработал, необходимо соблюсти некоторые правила и ограничения. Так, число подставляемых пробелов должно быть не менее, чем в два раза больше длины самого длинного слова (это "моя" аксиома, никак не доказанная, но на практике работающая). Если принять максимальную длину слова равной 50 символов, то пробелов должно быть не менее 100. Думаю, это вполне разумное предположение, потому что слово из 50 символов еще надо поискать. Даже в названии блюда "хартенбраунгевратенштайзенгорбейстраут" из бородатого анекдота про колбаску (Гугл в помощь, если не слышали) всего 38 символов.
С константой "100" разобрались. Разберемся с константой "200". Поскольку по условиям топика нужно было извлечь из строки подстроку, содержащую два последних слова, то значение 200 представляет собой не что иное, как общее количество символов в двух словах максимальной длины (2 по 50) и в 100 пробелах между ними, т.е. 50 + 100 + 50 = 200. Даже если слова будут поменьше, скажем, по 20 символов, то, поскольку перед первым же словом из двух тоже будут добавлены 100 пробелов, то ПРАВСИМВ(..., 200) вернет строку, состоящую из: 60 пробелов + 20 символов 1-го слова + 100 пробелов + 20 символов 2-го слова = всего 200 символов. После сжатия пробелов в обоих случаях останутся два последних слова исходной строки, разделенные одним пробелом.
Константа 200 соответствует получению двух последних слов в строке. Если нужно извлечь только одно последнее слово (второе из "двух последних"), то, предполагая максимально возможную длину слова равной 50 символов, нужно будет извлечь именно 50 символов, т.е. на 150 (50 символов первого слова + 100 пробелов) меньше значения 200.
Очевидно, что именно с шагом 150 нужно задавать значения вместо "200" и для других количеств извлекаемых последних слов: одно последнее - 50 два последних - 200 3 - 350 4 - 500 5 - 650 6 - 800 и т.д. (если надо
Если вас устроят другие значения вместо 50/100, например, 30/60, то ряд значений типа "200" может выглядеть по аналогии - от 30 с шагом 90: одно - 30 два - 120 3 - 210 4 - 300 5 - 390 6 - 480 и т.д.
P.S. НЕТ! Запутался я что-то сам Всё оказалось гораздо проще - ряд состоит из значений, кратных количеству подменяемых пробелов: Вместо "200" для других количеств извлекаемых последних слов нужно подставлять: одно последнее - 100 два последних - 200 3 - 300 4 - 400 5 - 500 6 - 600 7 - 700 8 - 800 и т.д. Извините, что первоначально ввёл в заблуждение.
[p.s.]И снова мимо! В общем, всё не так просто, оказывается... Буду ещё думать, но уже в другом сообщении - хватит это портить зачеркиваниями... Извините![/p.s.]
В "Личных сообщениях" поступила просьба расшифровать смысл констант "100" и "200". Подумалось, что интересно будет многим - поэтому и отвечаю здесь.
Главная идея в набивании в строку кучи дополнительных пробелов заключается в том, что строка приобретает такой вид, когда деление строки на нужные части будет происходить безболезненно, в месте скопления многих пробелов, без риска потери значимых символов или слов. После выполнения нужного деления строки все лишние пробелы из образовавшихся подстрок легко удаляются при помощи функции СЖПРОБЕЛЫ.
Чтобы данный механизм отработал, необходимо соблюсти некоторые правила и ограничения. Так, число подставляемых пробелов должно быть не менее, чем в два раза больше длины самого длинного слова (это "моя" аксиома, никак не доказанная, но на практике работающая). Если принять максимальную длину слова равной 50 символов, то пробелов должно быть не менее 100. Думаю, это вполне разумное предположение, потому что слово из 50 символов еще надо поискать. Даже в названии блюда "хартенбраунгевратенштайзенгорбейстраут" из бородатого анекдота про колбаску (Гугл в помощь, если не слышали) всего 38 символов.
С константой "100" разобрались. Разберемся с константой "200". Поскольку по условиям топика нужно было извлечь из строки подстроку, содержащую два последних слова, то значение 200 представляет собой не что иное, как общее количество символов в двух словах максимальной длины (2 по 50) и в 100 пробелах между ними, т.е. 50 + 100 + 50 = 200. Даже если слова будут поменьше, скажем, по 20 символов, то, поскольку перед первым же словом из двух тоже будут добавлены 100 пробелов, то ПРАВСИМВ(..., 200) вернет строку, состоящую из: 60 пробелов + 20 символов 1-го слова + 100 пробелов + 20 символов 2-го слова = всего 200 символов. После сжатия пробелов в обоих случаях останутся два последних слова исходной строки, разделенные одним пробелом.
Константа 200 соответствует получению двух последних слов в строке. Если нужно извлечь только одно последнее слово (второе из "двух последних"), то, предполагая максимально возможную длину слова равной 50 символов, нужно будет извлечь именно 50 символов, т.е. на 150 (50 символов первого слова + 100 пробелов) меньше значения 200.
Очевидно, что именно с шагом 150 нужно задавать значения вместо "200" и для других количеств извлекаемых последних слов: одно последнее - 50 два последних - 200 3 - 350 4 - 500 5 - 650 6 - 800 и т.д. (если надо
Если вас устроят другие значения вместо 50/100, например, 30/60, то ряд значений типа "200" может выглядеть по аналогии - от 30 с шагом 90: одно - 30 два - 120 3 - 210 4 - 300 5 - 390 6 - 480 и т.д.
P.S. НЕТ! Запутался я что-то сам Всё оказалось гораздо проще - ряд состоит из значений, кратных количеству подменяемых пробелов: Вместо "200" для других количеств извлекаемых последних слов нужно подставлять: одно последнее - 100 два последних - 200 3 - 300 4 - 400 5 - 500 6 - 600 7 - 700 8 - 800 и т.д. Извините, что первоначально ввёл в заблуждение.
[p.s.]И снова мимо! В общем, всё не так просто, оказывается... Буду ещё думать, но уже в другом сообщении - хватит это портить зачеркиваниями... Извините![/p.s.]
Доброе утро. Спасибо Вам большое за подробный ответ. В моем случае алгоритм 100-200-300 и так далее работает.
В любом случае, понимая алгоритм и принцип работы данной формулы, можно спокойно подобрать нужные значения практически для любой ситуации. Будет интересно попробовать на различных примерах, вдруг у кого-то эта формула не сработает))
Доброе утро. Спасибо Вам большое за подробный ответ. В моем случае алгоритм 100-200-300 и так далее работает.
В любом случае, понимая алгоритм и принцип работы данной формулы, можно спокойно подобрать нужные значения практически для любой ситуации. Будет интересно попробовать на различных примерах, вдруг у кого-то эта формула не сработает))Alla8520
с 2013 можно идти другим путём (пишу без оформления формул тегами, поскольку движок их "сжирает" тёзка подсказал - при использовании нужно будет убрать пробелы в начале тега):
ну и множество других плюшек, особенно в сочетании со СЦЕП() или ОБЪЕДИНИТЬ()
с 2013 можно идти другим путём (пишу без оформления формул тегами, поскольку движок их "сжирает" тёзка подсказал - при использовании нужно будет убрать пробелы в начале тега):
можно спокойно подобрать нужные значения практически для любой ситуации
Дык, как раз и пытаемся избавить благодарных потомков от подобных подборов путём вручения им уверенного знания
Собственно, ночь не прошла даром. Нахлынули сразу два синдрома - Менделеева, увидевшего во сне свою таблицу, и Нильса Бора, увидевшего во сне модель атома. И вот что приснилось скромному мне, и уже проверено, и уже практически работает (с опаской, конечно, говорю - боюсь сглазить после вчерашних зачеркиваний, но тем не менее).
Константы "100" (кол-во подставляемых пробелов) и "200" (кол-во правых символово) должны меняться (обе!) в зависимости от количества последних слов: кол-во подставляемых пробелов = кол-во последних слов * максимальная длина слов кол-во правых символов = квадрат кол-ва последних слов * максимальная длина слов
Таким образом, для рассматриваемого топиком случая двух последних слов получается: кол-во подставляемых пробелов = 2 * 50 = 100 кол-во правых символов = 2^2 * 50 = 4 * 50 = 200
И многострадальный ряд значений констант "100" и "200" для разных количеств последних слов, наконец, приобретает следующий вид: одно последнее - 50 - 50 два последних - 100 - 200 три последних - 150 - 450 (т.е. 3*50 и 9*50) 4 - 200 - 800 (т.е. 4*50 и 16*50) 5 - 250 - 1250 6 - 300 - 1800 7 - 350 - 2450 8 - 400 - 3200 и т.д. по аналогии - и, как уже сказали, до длины получающейся после подстановки пробелов строки в 32767 символов.
можно спокойно подобрать нужные значения практически для любой ситуации
Дык, как раз и пытаемся избавить благодарных потомков от подобных подборов путём вручения им уверенного знания
Собственно, ночь не прошла даром. Нахлынули сразу два синдрома - Менделеева, увидевшего во сне свою таблицу, и Нильса Бора, увидевшего во сне модель атома. И вот что приснилось скромному мне, и уже проверено, и уже практически работает (с опаской, конечно, говорю - боюсь сглазить после вчерашних зачеркиваний, но тем не менее).
Константы "100" (кол-во подставляемых пробелов) и "200" (кол-во правых символово) должны меняться (обе!) в зависимости от количества последних слов: кол-во подставляемых пробелов = кол-во последних слов * максимальная длина слов кол-во правых символов = квадрат кол-ва последних слов * максимальная длина слов
Таким образом, для рассматриваемого топиком случая двух последних слов получается: кол-во подставляемых пробелов = 2 * 50 = 100 кол-во правых символов = 2^2 * 50 = 4 * 50 = 200
И многострадальный ряд значений констант "100" и "200" для разных количеств последних слов, наконец, приобретает следующий вид: одно последнее - 50 - 50 два последних - 100 - 200 три последних - 150 - 450 (т.е. 3*50 и 9*50) 4 - 200 - 800 (т.е. 4*50 и 16*50) 5 - 250 - 1250 6 - 300 - 1800 7 - 350 - 2450 8 - 400 - 3200 и т.д. по аналогии - и, как уже сказали, до длины получающейся после подстановки пробелов строки в 32767 символов. Gustav
Тезка ФИЛЬТР.XML - соглашусь, интересное применение, разве что тормознутое, как и многие универсальные, специально сравнил поиск предпоследнего с таким вариантом
Тезка ФИЛЬТР.XML - соглашусь, интересное применение, разве что тормознутое, как и многие универсальные, специально сравнил поиск предпоследнего с таким вариантом
так-то да, но согласись, например, найти третье числовое значение в строке "вася 123 петя валя игорь 456 коля иоганн-3-таврический 12 антон 18" так будет проще:
так-то да, но согласись, например, найти третье числовое значение в строке "вася 123 петя валя игорь 456 коля иоганн-3-таврический 12 антон 18" так будет проще:
спору нет. Есть в этом смысл, конечно приятнее поломать голову над формулой, а не над xpath, но иногда приходяитс жертвовать интересами в пользу дела :-)
спору нет. Есть в этом смысл, конечно приятнее поломать голову над формулой, а не над xpath, но иногда приходяитс жертвовать интересами в пользу дела :-)bmv98rus
Замечательный Временно просто медведь , процентов на 20.