Iindex найти литеру в строке


Содержание

Поиск текста в файлах Linux

Иногда может понадобится найти файл, в котором содержится определённая строка или найти строку в файле, где есть нужное слово. В Linux всё это делается с помощью одной очень простой, но в то же время мощной утилиты grep. С её помощью можно искать не только строки в файлах, но и фильтровать вывод команд, и много чего ещё.

В этой инструкции мы рассмотрим, как выполняется поиск текста в файлах Linux, подробно разберём возможные опции grep, а также приведём несколько примеров работы с этой утилитой.

Что такое grep?

Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Секрет популярности — её мощь, она даёт возможность пользователям сортировать и фильтровать текст на основе сложных правил.

Утилита grep решаем множество задач, в основном она используется для поиска строк, соответствующих строке в тексте или содержимому файлов. Также она может находить по шаблону или регулярным выражениям. Команда в считанные секунды найдёт файл в с нужной строчкой, текст в файле или отфильтрует из вывода только пару нужных строк. А теперь давайте рассмотрим, как ей пользоваться.

Синтаксис grep

Синтаксис команды выглядит следующим образом:

$ grep [опции] шаблон [имя файла. ]

$ команда | grep [опции] шаблон

  • Опции — это дополнительные параметры, с помощью которых указываются различные настройки поиска и вывода, например количество строк или режим инверсии.
  • Шаблон — это любая строка или регулярное выражение, по которому будет вестись поиск
  • Файл и команда — это то место, где будет вестись поиск. Как вы увидите дальше, grep позволяет искать в нескольких файлах и даже в каталоге, используя рекурсивный режим.

Возможность фильтровать стандартный вывод пригодится,например, когда нужно выбрать только ошибки из логов или найти PID процесса в многочисленном отчёте утилиты ps.

Опции

Давайте рассмотрим самые основные опции утилиты, которые помогут более эффективно выполнять поиск текста в файлах grep:

  • -b — показывать номер блока перед строкой;
  • -c — подсчитать количество вхождений шаблона;
  • -h — не выводить имя файла в результатах поиска внутри файлов Linux;
  • -i — не учитывать регистр;
  • — l — отобразить только имена файлов, в которых найден шаблон;
  • -n — показывать номер строки в файле;
  • -s — не показывать сообщения об ошибках;
  • -v — инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;
  • -w — искать шаблон как слово, окружённое пробелами;
  • -e — использовать регулярные выражения при поиске;
  • -An — показать вхождение и n строк до него;
  • -Bn — показать вхождение и n строк после него;
  • -Cn — показать n строк до и после вхождения;

Все самые основные опции рассмотрели и даже больше, теперь перейдём к примерам работы команды grep Linux.

Примеры использования

С теорией покончено, теперь перейдём к практике. Рассмотрим несколько основных примеров поиска внутри файлов Linux с помощью grep, которые могут вам понадобиться в повседневной жизни.

Поиск текста в файлах

В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:

grep User /etc/passwd

В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:

А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:

grep -i «user» /etc/passwd

Вывести несколько строк

Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:

grep -A4 «EE» /var/log/xorg.0.log

Выведет строку с вхождением и 4 строчки после неё:

grep -B4 «EE» /var/log/xorg.0.log

Выведет целевую строку и 4 строчки до неё:

grep -C2 «EE» /var/log/xorg.0.log

Выведет по две строки с верху и снизу от вхождения.

Регулярные выражения в grep

Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:

Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:

grep «^Nov 10» messages.1

Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10

Поиск в конце строки — спецсимвол «$»:

grep «terminating.$» messages

Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.

Найдём все строки, которые содержат цифры:

grep «[0-9]» /var/log/Xorg.0.log

Вообще, регулярные выражения grep — это очень обширная тема, в этой статье я лишь показал несколько примеров. Как вы увидели, поиск текста в файлах grep становиться ещё эффективнее. Но на полное объяснение этой темы нужна целая статья, поэтому пока пропустим её и пойдем дальше.

Рекурсивное использование grep

Если вам нужно провести поиск текста в нескольких файлах, размещённых в одном каталоге или подкаталогах, например в файлах конфигурации Apache — /etc/apache2/, используйте рекурсивный поиск. Для включения рекурсивного поиска в grep есть опция -r. Следующая команда займётся поиском текста в файлах Linux во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:

grep -r «mydomain.com» /etc/apache2/

В выводе вы получите:

grep -r «zendsite» /etc/apache2/
/etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost
/etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite
/etc/apache2/vhosts.d/zendsite_vhost.conf:

Здесь перед найденной строкой указано имя файла, в котором она была найдена. Вывод имени файла легко отключить с помощью опции -h:

grep -h -r «zendsite» /etc/apache2/

ServerName zendsite.localhost
DocumentRoot /var/www/localhost/htdocs/zendsite

Поиск слов в grep

Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:

grep -w «abc» имя_файла

Поиск двух слов

Можно искать по содержимому файла не одно слово, а два сразу:

egrep -w ‘word1|word2’ /path/to/file

Количество вхождений строки

Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):

grep -c ‘word’ /path/to/file

C помощью опции -n можно выводить номер строки, в которой найдено вхождение, например:

grep -n ‘root’ /etc/passwd

Инвертированный поиск в grep

Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:

grep -v пар /path/to/file


Вывод имени файла

Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:

grep -l ‘primary’ *.c

Цветной вывод в grep

Также вы можете заставить программу выделять другим цветом вхождения в выводе:

grep —color root /etc/passwd

Выводы

Вот и всё. Мы рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Если у вас остались вопросы, пишите в комментариях!

Как отфильтровать текст, находящийся между двумя определёнными строками

Когда нам нужно найти строку, соответствующую определённому образцу, нам на помощь приходит команда grep и регулярные выражения. А что если нам нужно найти то, что находится между совпадением первого шаблона и между совпадением второго шаблона? То есть нам нужно найти содержимое находящееся между двумя определёнными строками.

Как найти текст, который начинает и заканчивается с определённых строк

Допустим, в HTML коде есть конструкция:

Но суть в любом случае одна — нам нужно найти фрагмент, начинающийся и заканчивающийся с определённых строк. При этом мы не знаем точное количество строк и, возможно, окаймляющие строки также могут различаться (то есть поиск выполняется по регулярному выражению).

Имеется несколько способов выполнить такой поиск. На ум в первую очередь приходит команда grep, но у Linux есть более удобные инструменты — выражения диапазона, которые поддерживаются командами sed и awk.

Если нам нужно найти строки вида:

Тогда команда sed будет следующей:

Рассмотрим чуть более простой пример, имется файл со следующим содержимым:

Мне нужно найти содержимое между любыми произвольными строками.

Допустим, я хочу найти содержимое между строками aaa и cdn, то есть я должен получить:

Или я хочу найти содержимое между строками zdk и dke, то есть вывод должен быть таким:

Каким образом добиться этого?

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

Для указанных выше примеров запуск команды такой:

Для второго случая:

Использование опции -n подавляет автоматический вывод, то есть будут напечатаны только строки, для которых это явно запрошено. То есть это случиться когда будет найден диапазон /aaa/,/cdn/.

Эти выражения диапазонов также доступны в awk, там вы можете сказать:

Конечно, все эти условия могут быть развёрнуты в более строгие выражения схожие с регулярными выражениями, к примеру:

Это позволит проверять, что строки состоят из точных совпадений aaa и cdn и ничего более.

Показанные два примера можно скомпоновать в одну единственную команду sed с более сложным синтаксисом:

Так что там с командой grep?

С командой grep конструкция для данного примера выглядела бы так:

В grep можно добиться множественного совпадения, но нужно использовать такой вариант grep как perl-regexp (то есть добавить опцию -P, которая поддерживается не на всех платформах, например, на OS X), поэтому в качестве рабочего решения мы заменяем новые строки на символ _ и после grep меняем их обратно.

В качестве альтернативы можно использовать pcregrep, которая поддерживает многостроковые шаблоны (опция -M).

Или используйте ex:

Рассмотрим ещё один пример поиска фрагментов из нескольких строк

Допустим имеется файл со следующим модержимым:

Мне хочется, чтобы были выбраны строки начиная с CK с конца строки и поиск совпадений был остановлен, когда строка на конце имеет D.

То есть должно быть выведено:

Лучше использовать awk или sed:

Если хочется именно grep, то для GNU grep это делается следующим образом:

  • -P активирует perl-regexp
  • -z устанавливает разделитель строк на NUL. Это принуждает grep видеть весь файл как одну строку
  • -o печать только совпадающей части
  • (?s) активирует PCRE_DOTALL, поэтому . любые символы или newline
  • \N совпадает со всем, кроме newline
  • .*? находит . в режиме nongreedy (не жадный)
  • (?

String. Index Of Метод

Определение

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода или строки в пределах данного экземпляра. Reports the zero-based index of the first occurrence of a specified Unicode character or string within this instance. Метод возвращает -1, если знак или строка не найдена в данном экземпляре. The method returns -1 if the character or string is not found in this instance.

Перегрузки

Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки в данном экземпляре. Reports the zero-based index of the first occurrence of the specified string in this instance. Поиск начинается с указанной позиции знака; проверяется заданное количество позиций. The search starts at a specified character position and examines a specified number of character positions.

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String. Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметры задают начальную позицию поиска в текущей строке, количество проверяемых знаков текущей строки и тип поиска. Parameters specify the starting search position in the current string, the number of characters in the current string to search, and the type of search to use for the specified string.

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String. Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметры задают начальную позицию поиска в текущей строке и тип поиска. Parameters specify the starting search position in the current string and the type of search to use for the specified string.

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа в данном экземпляре. Reports the zero-based index of the first occurrence of the specified character in this instance. Поиск начинается с указанной позиции знака; проверяется заданное количество позиций. The search starts at a specified character position and examines a specified number of character positions.

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String. Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметр определяет тип поиска заданной строки. A parameter specifies the type of search to use for the specified string.

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке. Reports the zero-based index of the first occurrence of the specified Unicode character in this string. Параметр определяет тип поиска заданного символа. A parameter specifies the type of search to use for the specified character.

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке. Reports the zero-based index of the first occurrence of the specified Unicode character in this string. Поиск начинается с указанной позиции знака. The search starts at a specified character position.

Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки в данном экземпляре. Reports the zero-based index of the first occurrence of the specified string in this instance.

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке. Reports the zero-based index of the first occurrence of the specified Unicode character in this string.

Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки в данном экземпляре. Reports the zero-based index of the first occurrence of the specified string in this instance. Поиск начинается с указанной позиции знака. The search starts at a specified character position.

IndexOf(String, Int32, Int32)

Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки в данном экземпляре. Reports the zero-based index of the first occurrence of the specified string in this instance. Поиск начинается с указанной позиции знака; проверяется заданное количество позиций. The search starts at a specified character position and examines a specified number of character positions.

Параметры

Строка для поиска. The string to seek.

Позиция, с которой начинается поиск. The search starting position.

Количество позиций знаков для проверки. The number of character positions to examine.

Возвраты

Отсчитываемая от нуля позиция индекса параметра value с начала текущего экземпляра, если строка найдена. Значение –1, если строка не найдена. The zero-based index position of value from the start of the current instance if that string is found, or -1 if it is not. Если значение параметра value равно Empty, возвращаемым значением является startIndex . If value is Empty, the return value is startIndex .

Исключения

Свойство value имеет значение null . value is null .

count или startIndex является отрицательным значением. count or startIndex is negative.


— или — -or- startIndex больше длины этой строки. startIndex is greater than the length of this string.

— или — -or- count больше, чем длина этой строки минус startIndex . count is greater than the length of this string minus startIndex .

Примеры

В следующем примере выполняется поиск индекса всех вхождений строки «he» в подстроке другой строки. The following example finds the index of all occurrences of the string «he» within a substring of another string. Обратите внимание, что количество символов для поиска должно быть пересчитано для каждой итерации. Note that the number of characters to be searched must be recalculated for each search iteration.

Комментарии

Нумерация индексов начинается с 0 (нуля). Index numbering starts from 0 (zero). Параметр startIndex может иметь значение в диапазоне от 0 до длины экземпляра строки. The startIndex parameter can range from 0 to the length of the string instance.

Этот метод выполняет поиск по словам (с учетом регистра и с учетом языка и региональных параметров), используя текущий язык и региональные параметры. This method performs a word (case-sensitive and culture-sensitive) search using the current culture. Поиск начинается с startIndex и продолжается startIndex + count -1. The search begins at startIndex and continues to startIndex + count -1. Символ в startIndex + count не включается в поиск. The character at startIndex + count is not included in the search.

Наборы символов содержат игнорируемые символы, то есть символы, которые не учитываются при выполнении лингвистического сравнения или сравнения с учетом языка и региональных параметров. Character sets include ignorable characters, which are characters that are not considered when performing a linguistic or culture-sensitive comparison. Если при поиске с учетом языка и региональных параметров параметр value содержит игнорируемый символ, результат аналогичен поиску с удаленным этим символом. In a culture-sensitive search, if value contains an ignorable character, the result is equivalent to searching with that character removed. Если value состоит только из одного или нескольких игнорируемых символов, метод IndexOf(String, Int32, Int32) всегда возвращает startIndex , то есть позиции символа, с которой начинается поиск. If value consists only of one or more ignorable characters, the IndexOf(String, Int32, Int32) method always returns startIndex , which is the character position at which the search begins. В следующем примере метод IndexOf(String, Int32, Int32) используется для поиска позиции мягкого дефиса (U + 00AD), за которым следует символ «m», начинающийся с третьего по шестой позиции в двух строках. In the following example, the IndexOf(String, Int32, Int32) method is used to find the position of a soft hyphen (U+00AD) followed by an «m» starting in the third through sixth character positions in two strings. Только одна из строк содержит требуемую подстроку. Only one of the strings contains the required substring. Если пример выполняется в .NET Framework 4 .NET Framework 4 или более поздней версии, в обоих случаях, поскольку мягкий дефис является игнорируемым символом, метод возвращает индекс «m» в строке, когда он выполняет сравнение с учетом языка и региональных параметров. If the example is run on the .NET Framework 4 .NET Framework 4 or later, in both cases, because the soft hyphen is an ignorable character, the method returns the index of «m» in the string when it performs a culture-sensitive comparison. Обратите внимание, что в случае первой строки, содержащей мягкий перенос перед буквой «m», этот метод возвращает не индекс мягкого переноса, а индекс буквы «m». Note that in the case of the first string, which includes the soft hyphen followed by an «m», the method fails to return the index of the soft hyphen but instead returns the index of the «m».

Примечания для тех, кто вызывает этот метод

Как описано в статье рекомендации по использованию строк, рекомендуется избегать вызова методов сравнения строк, которые заменяют значения по умолчанию, а вызывают методы, для которых требуется явно указать параметры. As explained in Best Practices for Using Strings, we recommend that you avoid calling string comparison methods that substitute default values and instead call methods that require parameters to be explicitly specified. Чтобы использовать правила сравнения текущего языка и региональных параметров для выполнения этой операции, вызовите перегрузку метода IndexOf(String, Int32, Int32, StringComparison) со значением CurrentCulture для своего параметра comparisonType . To use the comparison rules of the current culture to perform this operation, call the IndexOf(String, Int32, Int32, StringComparison) method overload with a value of CurrentCulture for its comparisonType parameter.

Дополнительно

IndexOf(String, Int32, Int32, StringComparison)

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String. Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметры задают начальную позицию поиска в текущей строке, количество проверяемых знаков текущей строки и тип поиска. Parameters specify the starting search position in the current string, the number of characters in the current string to search, and the type of search to use for the specified string.

Параметры

Строка для поиска. The string to seek.

Позиция, с которой начинается поиск. The search starting position.

Количество позиций знаков для проверки. The number of character positions to examine.

Одно из значений перечисления, определяющее правила поиска. One of the enumeration values that specifies the rules for the search.

Возвраты

Отсчитываемая от нуля позиция параметра value с начала текущего экземпляра, если строка найдена, или -1, если нет. The zero-based index position of the value parameter from the start of the current instance if that string is found, or -1 if it is not. Если значение параметра value равно Empty, возвращаемым значением является startIndex . If value is Empty, the return value is startIndex .

Исключения

Свойство value имеет значение null . value is null .

count или startIndex является отрицательным значением. count or startIndex is negative.

— или — -or- startIndex больше длины этого экземпляра. startIndex is greater than the length of this instance.

— или — -or- count больше, чем длина этой строки минус startIndex . count is greater than the length of this string minus startIndex .

comparisonType не является допустимым значением StringComparison. comparisonType is not a valid StringComparison value.

Примеры

В следующем примере показаны три перегрузки метода IndexOf, которые находят первое вхождение строки в другой строке, используя различные значения перечисления StringComparison. The following example demonstrates three overloads of the IndexOf method that find the first occurrence of a string within another string using different values of the StringComparison enumeration.

Комментарии

Нумерация индексов начинается с 0 (нуля). Index numbering starts from 0 (zero). Параметр startIndex может иметь значение в диапазоне от 0 до длины экземпляра строки. The startIndex parameter can range from 0 to the length of the string instance.

Поиск начинается с startIndex и продолжается startIndex + count -1. The search begins at startIndex and continues to startIndex + count -1. Символ в startIndex + count не включается в поиск. The character at startIndex + count is not included in the search.

Параметр comparisonType определяет Поиск параметра value , используя текущий или инвариантный язык и региональные параметры, с учетом регистра или без учета регистра, а также с помощью правил сравнения по словам или порядковому номеру. The comparisonType parameter specifies to search for the value parameter using the current or invariant culture, using a case-sensitive or case-insensitive search, and using word or ordinal comparison rules.

Примечания для тех, кто вызывает этот метод

Наборы символов содержат игнорируемые символы, то есть символы, которые не учитываются при выполнении лингвистического сравнения или сравнения с учетом языка и региональных параметров. Character sets include ignorable characters, which are characters that are not considered when performing a linguistic or culture-sensitive comparison. Если при поиске с учетом языка и региональных параметров (то есть, если параметр comparisonType не имеет значение Ordinal или OrdinalIgnoreCase) параметр value содержит игнорируемый символ, результат аналогичен поиску с удаленным этим символом. In a culture-sensitive search (that is, if comparisonType is not Ordinal or OrdinalIgnoreCase), if value contains an ignorable character, the result is equivalent to searching with that character removed. Если value состоит только из одного или нескольких игнорируемых символов, метод IndexOf(String, Int32, Int32, StringComparison) всегда возвращает startIndex , то есть позиции символа, с которой начинается поиск. If value consists only of one or more ignorable characters, the IndexOf(String, Int32, Int32, StringComparison) method always returns startIndex , which is the character position at which the search begins.

В следующем примере метод IndexOf(String, Int32, Int32, StringComparison) используется для поиска позиции мягкого дефиса (U + 00AD), за которым следует символ «m», начинающийся с третьего по шестой позиции в двух строках. In the following example, the IndexOf(String, Int32, Int32, StringComparison) method is used to find the position of a soft hyphen (U+00AD) followed by an «m» starting in the third through sixth character positions in two strings. Только одна из строк содержит требуемую подстроку. Only one of the strings contains the required substring. Если пример выполняется в .NET Framework 4 .NET Framework 4 или более поздней версии, в обоих случаях, поскольку мягкий дефис является игнорируемым символом, метод возвращает индекс «m» в строке, когда он выполняет сравнение с учетом языка и региональных параметров. If the example is run on the .NET Framework 4 .NET Framework 4 or later, in both cases, because the soft hyphen is an ignorable character, the method returns the index of «m» in the string when it performs a culture-sensitive comparison. Однако при выполнении порядкового сравнения он находит подстроку только в первой строке. When it performs an ordinal comparison, however, it finds the substring only in the first string. Обратите внимание, что в случае первой строки, которая включает мягкий дефис, за которым следует символ «m», метод не возвращает индекс мягкого дефиса, а вместо этого возвращает индекс «m», когда он выполняет сравнение с учетом языка и региональных параметров. Note that in the case of the first string, which includes the soft hyphen followed by an «m», the method fails to return the index of the soft hyphen but instead returns the index of the «m» when it performs a culture-sensitive comparison. Этот метод возвращает индекс мягкого переноса в первой строке только при выполнении порядкового сравнения. The method returns the index of the soft hyphen in the first string only when it performs an ordinal comparison.

IndexOf(String, Int32, StringComparison)

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String. Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметры задают начальную позицию поиска в текущей строке и тип поиска. Parameters specify the starting search position in the current string and the type of search to use for the specified string.

Параметры

Строка для поиска. The string to seek.

Позиция, с которой начинается поиск. The search starting position.

Одно из значений перечисления, определяющее правила поиска. One of the enumeration values that specifies the rules for the search.

Возвраты

Отсчитываемая от нуля позиция параметра value с начала текущего экземпляра, если строка найдена, или -1, если нет. The zero-based index position of the value parameter from the start of the current instance if that string is found, or -1 if it is not. Если значение параметра value равно Empty, возвращаемым значением является startIndex . If value is Empty, the return value is startIndex .

Исключения

Свойство value имеет значение null . value is null .

startIndex имеет значение меньше нуля или больше длины этой строки. startIndex is less than 0 (zero) or greater than the length of this string.

comparisonType не является допустимым значением StringComparison. comparisonType is not a valid StringComparison value.

Примеры

В следующем примере показаны три перегрузки метода IndexOf, которые находят первое вхождение строки в другой строке, используя различные значения перечисления StringComparison. The following example demonstrates three overloads of the IndexOf method that find the first occurrence of a string within another string using different values of the StringComparison enumeration.

Комментарии

Нумерация индексов начинается с 0. Index numbering starts from 0. Параметр startIndex может иметь значение в диапазоне от 0 до длины экземпляра строки. The startIndex parameter can range from 0 to the length of the string instance. Если startIndex соответствует длине экземпляра строки, метод возвращает значение-1. If startIndex equals the length of the string instance, the method returns -1.

Параметр comparisonType определяет Поиск параметра value , используя текущий или инвариантный язык и региональные параметры, с учетом регистра или без учета регистра, а также с помощью правил сравнения по словам или порядковому номеру. The comparisonType parameter specifies to search for the value parameter using the current or invariant culture, using a case-sensitive or case-insensitive search, and using word or ordinal comparison rules.

Примечания для тех, кто вызывает этот метод

Наборы символов содержат игнорируемые символы, то есть символы, которые не учитываются при выполнении лингвистического сравнения или сравнения с учетом языка и региональных параметров. Character sets include ignorable characters, which are characters that are not considered when performing a linguistic or culture-sensitive comparison. Если при поиске с учетом языка и региональных параметров (то есть, если параметр comparisonType не имеет значение Ordinal или OrdinalIgnoreCase) параметр value содержит игнорируемый символ, результат аналогичен поиску с удаленным этим символом. In a culture-sensitive search (that is, if comparisonType is not Ordinal or OrdinalIgnoreCase), if value contains an ignorable character, the result is equivalent to searching with that character removed. Если value состоит только из одного или нескольких игнорируемых символов, метод IndexOf(String, Int32, StringComparison) всегда возвращает startIndex , то есть позиции символа, с которой начинается поиск. If value consists only of one or more ignorable characters, the IndexOf(String, Int32, StringComparison) method always returns startIndex , which is the character position at which the search begins.

В следующем примере метод IndexOf(String, Int32, StringComparison) используется для поиска позиции мягкого дефиса (U + 00AD), за которым следует символ «m», начиная с третьего положения символа в двух строках. In the following example, the IndexOf(String, Int32, StringComparison) method is used to find the position of a soft hyphen (U+00AD) followed by an «m» starting with the third character position in two strings. Только одна из строк содержит необходимую подстроку. Если пример выполняется в .NET Framework 4 .NET Framework 4 или более поздней версии, в обоих случаях, поскольку мягкий дефис является игнорируемым символом, метод возвращает индекс «m» в строке, когда он выполняет сравнение с учетом языка и региональных параметров. Only one of the strings contains the required substring.If the example is run on the .NET Framework 4 .NET Framework 4 or later, in both cases, because the soft hyphen is an ignorable character, the method returns the index of «m» in the string when it performs a culture-sensitive comparison. Обратите внимание, что в случае первой строки, содержащей мягкий перенос перед буквой «m», этот метод возвращает не индекс мягкого переноса, а индекс буквы «m». Note that in the case of the first string, which includes the soft hyphen followed by an «m», the method fails to return the index of the soft hyphen but instead returns the index of the «m». Этот метод возвращает индекс мягкого переноса в первой строке только при выполнении порядкового сравнения. The method returns the index of the soft hyphen in the first string only when it performs an ordinal comparison.

IndexOf(Char, Int32, Int32)

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа в данном экземпляре. Reports the zero-based index of the first occurrence of the specified character in this instance. Поиск начинается с указанной позиции знака; проверяется заданное количество позиций. The search starts at a specified character position and examines a specified number of character positions.

Параметры

Искомый знак Юникода. A Unicode character to seek.

Позиция, с которой начинается поиск. The search starting position.

Количество позиций знаков для проверки. The number of character positions to examine.

Возвраты

Отсчитываемая от нуля позиция индекса параметра value с начала строки, если символ найден. Значение –1, если символ не найден. The zero-based index position of value from the start of the string if that character is found, or -1 if it is not.

Исключения

count или startIndex является отрицательным значением. count or startIndex is negative.

— или — -or- startIndex больше длины этой строки. startIndex is greater than the length of this string.

— или — -or- count больше, чем длина этой строки минус startIndex . count is greater than the length of this string minus startIndex .


Примеры

В следующем примере демонстрируется использование метода IndexOf. The following example demonstrates the IndexOf method.

Комментарии

Поиск начинается с startIndex и продолжается startIndex + count -1. The search begins at startIndex and continues to startIndex + count -1. Символ в startIndex + count не включается в поиск. The character at startIndex + count is not included in the search.

Нумерация индексов начинается с 0 (нуля). Index numbering starts from 0 (zero). Параметр startIndex может иметь значение в диапазоне от 0 до длины экземпляра строки. The startIndex parameter can range from 0 to the length of the string instance.

Этот метод выполняет поиск по порядковому номеру (без учета языка и региональных параметров), где символ считается эквивалентным другому символу, только если их скалярные значения в Юникоде одинаковы. This method performs an ordinal (culture-insensitive) search, where a character is considered equivalent to another character only if their Unicode scalar values are the same. Чтобы выполнить поиск с учетом языка и региональных параметров, используйте метод CompareInfo.IndexOf, где скалярное значение Юникода, представляющее составной символ, например лигатура «Æ» (U + 00C6), может считаться эквивалентным любому вхождению компонентов символа в правильном последовательность, например «AE» (U + 0041, U + 0045), в зависимости от языка и региональных параметров. To perform a culture-sensitive search, use the CompareInfo.IndexOf method, where a Unicode scalar value representing a precomposed character, such as the ligature «Æ» (U+00C6), might be considered equivalent to any occurrence of the character’s components in the correct sequence, such as «AE» (U+0041, U+0045), depending on the culture.

Дополнительно

IndexOf(String, StringComparison)

Возвращает индекс с отсчетом от нуля первого вхождения указанной строки в текущем объекте String. Reports the zero-based index of the first occurrence of the specified string in the current String object. Параметр определяет тип поиска заданной строки. A parameter specifies the type of search to use for the specified string.

Параметры

Строка для поиска. The string to seek.

Одно из значений перечисления, определяющее правила поиска. One of the enumeration values that specifies the rules for the search.

Возвраты

Индекс позиции строки, заданной в параметре value , если она найдена, и -1, если нет. The index position of the value parameter if that string is found, or -1 if it is not. Если значение value равно Empty, то возвращаемое значение равно 0. If value is Empty, the return value is 0.

Исключения

Свойство value имеет значение null . value is null .

comparisonType не является допустимым значением StringComparison. comparisonType is not a valid StringComparison value.

Примеры

В следующем примере показаны три перегрузки метода IndexOf, которые находят первое вхождение строки в другой строке, используя различные значения перечисления StringComparison. The following example demonstrates three overloads of the IndexOf method that find the first occurrence of a string within another string using different values of the StringComparison enumeration.

Комментарии

Нумерация индексов начинается с нуля. Index numbering starts from zero.

Параметр comparisonType определяет Поиск параметра value , используя текущий или инвариантный язык и региональные параметры, с учетом регистра или без учета регистра, а также с помощью правил сравнения по словам или порядковому номеру. The comparisonType parameter specifies to search for the value parameter using the current or invariant culture, using a case-sensitive or case-insensitive search, and using word or ordinal comparison rules.

Примечания для тех, кто вызывает этот метод

Наборы символов содержат игнорируемые символы, то есть символы, которые не учитываются при выполнении лингвистического сравнения или сравнения с учетом языка и региональных параметров. Character sets include ignorable characters, which are characters that are not considered when performing a linguistic or culture-sensitive comparison. Если при поиске с учетом языка и региональных параметров (то есть, если параметр comparisonType не имеет значение Ordinal или OrdinalIgnoreCase) параметр value содержит игнорируемый символ, результат аналогичен поиску с удаленным этим символом. In a culture-sensitive search (that is, if comparisonType is not Ordinal or OrdinalIgnoreCase), if value contains an ignorable character, the result is equivalent to searching with that character removed. Если value состоит только из одного или нескольких игнорируемых символов, метод IndexOf(String, StringComparison) всегда возвращает значение 0 (ноль), чтобы указать, что совпадение находится в начале текущего экземпляра. If value consists only of one or more ignorable characters, the IndexOf(String, StringComparison) method always returns 0 (zero) to indicate that the match is found at the beginning of the current instance.

В следующем примере метод IndexOf(String, StringComparison) используется для поиска трех подстрок (мягкий дефис (U + 00AD), мягкий дефис, за которым следует «n», и мягкий дефис, за которым следует «m») в двух строках. In the following example, the IndexOf(String, StringComparison) method is used to find three substrings (a soft hyphen (U+00AD), a soft hyphen followed by «n», and a soft hyphen followed by «m») in two strings. Только одна из строк содержит мягкий перенос. Only one of the strings contains a soft hyphen. Если пример выполняется в .NET Framework 4 .NET Framework 4 или более поздней версии, поскольку мягкий дефис является игнорируемым, то поиск с учетом языка и региональных параметров возвращает то же значение, которое возвращается, если мягкий дефис не был включен в строку поиска. If the example is run on the .NET Framework 4 .NET Framework 4 or later, because the soft hyphen is an ignorable character, a culture-sensitive search returns the same value that it would return if the soft hyphen were not included in the search string. Однако порядковый поиск по порядковому номеру успешно находит мягкий дефис в одной строке и сообщает, что он отсутствует во второй строке. An ordinal search, however, successfully finds the soft hyphen in one string and reports that it is absent from the second string.

IndexOf(Char, StringComparison)

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке. Reports the zero-based index of the first occurrence of the specified Unicode character in this string. Параметр определяет тип поиска заданного символа. A parameter specifies the type of search to use for the specified character.

Параметры

Символ для поиска. The character to seek.

Значение перечисления, определяющее правила поиска. An enumeration value that specifies the rules for the search.

Возвраты

Отсчитываемое от нуля значение индекса параметра value , если этот знак найден; в противном случае — значение –1. The zero-based index of value if that character is found, or -1 if it is not.

Исключения

comparisonType не является допустимым значением StringComparison. comparisonType is not a valid StringComparison value.

Комментарии

Нумерация индексов начинается с нуля. Index numbering starts from zero.

Параметр comparisonType является членом перечисления StringComparison, который определяет, использует ли поиск аргумента value текущего или инвариантного языка и региональных параметров, учитывает регистр или не учитывает регистр либо использует правила сравнения по словам или порядковому номеру. The comparisonType parameter is a StringComparison enumeration member that specifies whether the search for the value argument uses the current or invariant culture, is case-sensitive or case-insensitive, or uses word or ordinal comparison rules.

IndexOf(Char, Int32)

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке. Reports the zero-based index of the first occurrence of the specified Unicode character in this string. Поиск начинается с указанной позиции знака. The search starts at a specified character position.

Параметры

Искомый знак Юникода. A Unicode character to seek.

Позиция, с которой начинается поиск. The search starting position.

Возвраты

Отсчитываемая от нуля позиция индекса параметра value с начала строки, если символ найден. Значение –1, если символ не найден. The zero-based index position of value from the start of the string if that character is found, or -1 if it is not.

Исключения

startIndex имеет значение меньше нуля или больше длины строки. startIndex is less than 0 (zero) or greater than the length of the string.

Примеры

В следующем примере демонстрируется использование метода IndexOf. The following example demonstrates the IndexOf method.

Комментарии

Нумерация индексов начинается с 0. Index numbering starts from 0. Параметр startIndex может иметь значение в диапазоне от 0 до длины экземпляра строки. The startIndex parameter can range from 0 to the length of the string instance. Если startIndex соответствует длине экземпляра строки, метод возвращает значение-1. If startIndex equals the length of the string instance, the method returns -1.

Поиск в диапазоне от startIndex до конца строки. The search ranges from startIndex to the end of the string.

Этот метод выполняет поиск по порядковому номеру (без учета языка и региональных параметров), где символ считается эквивалентным другому символу, только если их скалярные значения в Юникоде одинаковы. This method performs an ordinal (culture-insensitive) search, where a character is considered equivalent to another character only if their Unicode scalar values are the same. Чтобы выполнить поиск с учетом языка и региональных параметров, используйте метод CompareInfo.IndexOf, где скалярное значение Юникода, представляющее составной символ, например лигатура «Æ» (U + 00C6), может считаться эквивалентным любому вхождению компонентов символа в правильном последовательность, например «AE» (U + 0041, U + 0045), в зависимости от языка и региональных параметров. To perform a culture-sensitive search, use the CompareInfo.IndexOf method, where a Unicode scalar value representing a precomposed character, such as the ligature «Æ» (U+00C6), might be considered equivalent to any occurrence of the character’s components in the correct sequence, such as «AE» (U+0041, U+0045), depending on the culture.

Дополнительно

IndexOf(String)

Возвращает индекс с отсчетом от нуля первого вхождения значения указанной строки в данном экземпляре. Reports the zero-based index of the first occurrence of the specified string in this instance.

Параметры

Строка для поиска. The string to seek.

Возвраты

Положение в индексе (начиная с нуля) параметра value , если эта строка найдена, или значение -1, если она не найдена. The zero-based index position of value if that string is found, or -1 if it is not. Если значение value равно Empty, то возвращаемое значение равно 0. If value is Empty, the return value is 0.

Исключения

Свойство value имеет значение null . value is null .

Примеры

В следующем примере выполняется поиск «n» в «Animal». The following example searches for the «n» in «animal». Поскольку индексы строк начинаются с нуля, а не из одного, метод IndexOf(String) указывает, что «n» находится в позиции 1. Because string indexes begin at zero rather than one, the IndexOf(String) method indicates that the «n» is at position 1.

В следующем примере используется метод IndexOf, чтобы определить начальную точку имени животного в предложении. The following example uses the IndexOf method to determine the starting position of an animal name in a sentence. Затем она использует эту точку для вставки прилагательного, описывающего животное в предложение. It then uses this position to insert an adjective that describes the animal into the sentence.

Комментарии

Нумерация индексов начинается с нуля. Index numbering starts from zero.


Этот метод выполняет поиск по словам (с учетом регистра и с учетом языка и региональных параметров), используя текущий язык и региональные параметры. This method performs a word (case-sensitive and culture-sensitive) search using the current culture. Поиск начинается с позиции первого символа данного экземпляра и продолжается до последней позиции символа. The search begins at the first character position of this instance and continues until the last character position.

Наборы символов содержат игнорируемые символы, то есть символы, которые не учитываются при выполнении лингвистического сравнения или сравнения с учетом языка и региональных параметров. Character sets include ignorable characters, which are characters that are not considered when performing a linguistic or culture-sensitive comparison. Если при поиске с учетом языка и региональных параметров параметр value содержит игнорируемый символ, результат аналогичен поиску с удаленным этим символом. In a culture-sensitive search, if value contains an ignorable character, the result is equivalent to searching with that character removed. Если value состоит только из одного или нескольких игнорируемых символов, метод IndexOf(String) всегда возвращает значение 0 (ноль), чтобы указать, что совпадение находится в начале текущего экземпляра. If value consists only of one or more ignorable characters, the IndexOf(String) method always returns 0 (zero) to indicate that the match is found at the beginning of the current instance. В следующем примере метод IndexOf(String) используется для поиска трех подстрок (мягкий дефис (U + 00AD), мягкий дефис, за которым следует «n», и мягкий дефис, за которым следует «m») в двух строках. In the following example, the IndexOf(String) method is used to find three substrings (a soft hyphen (U+00AD), a soft hyphen followed by «n», and a soft hyphen followed by «m») in two strings. Только одна из строк содержит мягкий перенос. Only one of the strings contains a soft hyphen. Если пример выполняется в .NET Framework 4 .NET Framework 4 или более поздней версии, в каждом случае, поскольку мягкий дефис является проигнорированным символом, результат будет таким же, как если бы мягкий перенос не включался в value . If the example is run on the .NET Framework 4 .NET Framework 4 or later, in each case, because the soft hyphen is an ignorable character, the result is the same as if the soft hyphen had not been included in value . При поиске только мягкого дефиса метод возвращает 0 (ноль), чтобы указать, что обнаружено совпадение в начале строки. When searching for a soft hyphen only, the method returns 0 (zero) to indicate that it has found a match at the beginning of the string.

Примечания для тех, кто вызывает этот метод

Как описано в статье рекомендации по использованию строк, рекомендуется избегать вызова методов сравнения строк, которые заменяют значения по умолчанию, а вызывают методы, для которых требуется явно указать параметры. As explained in Best Practices for Using Strings, we recommend that you avoid calling string comparison methods that substitute default values and instead call methods that require parameters to be explicitly specified. Чтобы найти первый индекс подстроки в экземпляре строки с помощью правил сравнения текущего языка и региональных параметров, вызовите перегрузку метода IndexOf(String, StringComparison) со значением CurrentCulture для своего параметра comparisonType . To find the first index of a substring within a string instance by using the comparison rules of the current culture, call the IndexOf(String, StringComparison) method overload with a value of CurrentCulture for its comparisonType parameter.

Дополнительно

IndexOf(Char)

Возвращает индекс с отсчетом от нуля первого вхождения указанного символа Юникода в данной строке. Reports the zero-based index of the first occurrence of the specified Unicode character in this string.

Поиск подстроки в строке

Сейчас мы разберём на примерах, как может выглядеть алгоритм поиска подстроки в строке. Примеры будут основываться на функциях стандартных библиотек, ведь именно в таких функциях и проявляются все удобства написания программ. А вот классический разбор алгоритма, основанный на циклах и сравнениях, также достаточно примечателен. Поэтому мы его рассмотрим в этом же уроке.

Сам алгоритм в принципе очень прост. Есть две строки. Например «Hello world» и «lo»

Работать будем в два цикла:

  1. Первый будет выполнять проход по всей строке, и искать местоположение первой буквы искомой строки ( «lo» ).
  2. Второй, начиная с найденной позиции первой буквы – сверять, какие буквы стоят после неё и сколько из них подряд совпадают.

Проиллюстрируем поиск подстроки в строке:

На первых двух итерациях цикла сравниваемые буквы не будут совпадать (выделено красным). На третьей итерации искомая буква (первый символ искомого слова) совпала с символом в строке, где происходит поиск. При таком совпадении в работу включается второй цикл.

Он призван отсчитывать количество символов после первого в искомой строке, которые будут совпадать с символами в строке исходной. Если один из следующих символов не совпадает – цикл завершает свою работу. Нет смысла гонять цикл впустую, после первого несовпадения, так как уже понятно, что искомого тут нет.

На третьей итерации совпал только первый символ искомой строки, а вот второй уже не совпадает. Придется первому циклу продолжить работу. Четвертая итерация дает необходимые результаты – совпадают все символы искомой строки с частью исходной строки. А раз все символы совпали – подстрока найдена. Работу алгоритма можно закончить.

Посмотрим, как выглядит классический код поиска подстроки в строке в С++:

Iindex найти литеру в строке

Поиск значения в одномерном или двумерном массиве. Аналогично _ArrayBinarySearch(), но в отличии от него не требуется сортировка.

$avArray Массив для поиска
$vValue Значение для поиска в массиве (по умолчанию полное соответствие содержимому ячейки)
$iStart [необязательный] Индекс массива, от которого начинать поиск
$iEnd [необязательный] Индекс массива, в котором закончить поиск
$iCase [необязательный] Чувствительность к регистру
0 — (по умолчанию) Поиск без учёта регистра
1 — Поиск с учётом регистра
$iCompare [необязательный]
0 — (по умолчанию) Сравнение с приведением к одному типу, например при $iCase = 0 эти значения будут являться совпадением: «строка» = 0, «» = 0 или «0» = 0
1 — Частичное совпадение, искомая строка может быть частью строки содержащейся в ячейке массива (StringInStr)
2 — При сравнении учитывать совпадение типа переменной с помощью VarGetType
$iForward [необязательный] Если установлено в 0, то искать в массиве от конца к началу (а не от начала к концу)
$iSubItem [необязательный] Индекс колонки для поиска в двумерном массиве
Успех: Возвращает первый найденный индекс массива, в котором найдено значение $vValue
Ошибка: Возвращает -1, устанавливает @error :
@error : 1 — $avArray не является массивом
2 — Массив $avArray не является одномерным или двумерным массивом
4 — $iStart больше $iEnd
6 — Значение $vValue не найдено в массиве
7 — Размерность массива $avArray более двух
(3, 5 — Устаревшие коды ошибок)

Эта функция возможно медленнее _ArrayBinarySearch () , но полезна, когда порядок массива не может быть изменён.

$sSearch = InputBox ( «Демонстрация _ArraySearch()» , «Укажите текст для поиска» )
If @error Then Exit

$iIndex = _ArraySearch ( $avArray , $sSearch , 0 , 0 , 0 , 1 )
If @error Then
MsgBox ( 4096 , «Не найдено» , ‘»‘ & $sSearch & ‘» не был найден в массиве.’ )
Else
MsgBox ( 4096 , «Найдено» , ‘»‘ & $sSearch & ‘» найден в массиве в позиции ‘ & $iIndex & «.» )
EndIf

$sSearch = InputBox ( «Демонстрация _ArraySearch()» , «Укажите текст для поиска» )
If @error Then Exit

$sColumn = InputBox ( «Демонстрация _ArraySearch()» , «Укажите колонку для поиска» )
If @error Then Exit
$sColumn = Int ( $sColumn )

$iIndex = _ArraySearch ( $avArray , $sSearch , 0 , 0 , 0 , 1 , 1 , $sColumn )
If @error Then
MsgBox ( 4096 , «Не найдено» , ‘»‘ & $sSearch & ‘» не найдено в колонке ‘ & $sColumn & ‘.’ )
Else
MsgBox ( 4096 , «Найдено» , ‘»‘ & $sSearch & ‘» найден в массиве в позиции ‘ & $iIndex & ‘ в колонке ‘ & $sColumn & ‘.’ )
EndIf

Форум

Справочник

Поиск по форуму
Расширенный поиск
К странице.

Илья Кантор, 10 мая 2009 — 15:40

indexOf

Синтаксис

Аргументы

Описание, примеры

Поиск осуществляется слева направо. Метод чувствителен к регистру символов.

Пустая подстрока находится в любом случае:

Следующий пример демонстрирует использование indexOf для подсчета количества повторений буквы в строке.

А можно сделать indexOf нечувствительным к регистру?

объясните пожалуйста что это означает?

Последние комментарии
  • Nice
    1 день 11 часов назад
  • Комментарий
    3 дня 18 часов назад
  • A very nice blog, I like the way you.
    5 дней 4 часа назад
  • This is a great thing, I think everyone.
    5 дней 4 часа назад
  • It is wonderful to be here with.
    5 дней 4 часа назад
  • Download and play DOM Level 0 — это.
    5 дней 8 часов назад
  • We are the children
    6 дней 9 часов назад
  • function firstUniqLiter(str) <
    6 дней 17 часов назад
  • Великие посты! Я на самом деле.
    1 неделя 11 часов назад
  • artical is really informative and.
    1 неделя 1 день назад
Последние темы на форуме

Do you want to master web development?

Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

Card title

This card has supporting text below as a natural lead-in to additional content.

Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

Card title


This card has supporting text below as a natural lead-in to additional content.

Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

Функции CHARINDEX и PATINDEX

Функция CHARINDEX имеет синтаксис:

Здесь необязательный целочисленный параметр стартовая_позиция определяет позицию в строковом выражении, начиная с которой выполняется поиск. Если этот параметр опущен, поиск выполняется от начала строкового_выражения. Например, запрос

name
Kirishima
Musashi
Washington

Следует отметить, что если искомая подстрока либо строковое выражение есть NULL , то результатом функции тоже будет NULL .

Следующий пример определяет позиции первого и второго вхождения символа a в имени корабля California:

Обратите внимание, что при определении второго символа в функции CHARINDEX используется стартовая позиция, которой является позиция следующего за первой буквой a символа — CHARINDEX(‘a’, name)+1 . Правильность результата — 2 и 10 — легко проверить.

Функция PATINDEX имеет следующий синтаксис:

Главное отличие этой функции от CHARINDEX заключается в том, что поисковая строка может содержать подстановочные знаки — % и _. При этом концевые знаки % являются обязательными. Например, использование этой функции в первом примере будет иметь вид

Iindex найти литеру в строке

Ещё один вопрос по строкам:
Есть строка «http://site/213/4563» или «http://site/1074/3242». Вместо этих чисел могут быть другие.
Как найти и записать в отдельные переменные 213 или 1074, 4563 или 3242?

Вот так нахожу 213 или 1024:

Можно по разному, кто как привык, мне например так проще.

Копирует текст от нужного слеша до следующего или если его нет, то до конца строки

30.09.2007, 21:00 #5
30.09.2007, 21:54 #6

Как мало нужно для счастья

30.09.2007, 22:38 #7

Alar, не понятно куда помещать

поместил в public, пишет ошибку:
Unsatisfied forward or external declaration: ‘TForm1.AnsiPos’

И ещё как сделать поиск строки по всему тексту? Чтобы после того как искомый текст встретиться в тексте, искать до конца документа и записывать в другие переменные?

01.10.2007, 23:56 #8

CoDeR AnsiPos — передаёт адрес первого символа в строке, я его использую ещё и так

02.10.2007, 01:01 #9
if AnsiPos(текст, большая длинная строка) <>0 then текст есть в большой длинной строке;
Delete(S,1,AnsiPos(‘?’,S));

И опять прогоняю по строке S

Впринципе, есть инструменты, а как использовать их придумай сам

Найти в ячейке любое слово из списка

Предположим, вы получаете от поставщика/заказчика/клиента заполненную таблицу с перечнем продукции:

и эту таблицу необходимо сравнить с артикулами/кодами товара в имеющемся у вас каталоге продукции:

Как видно — в нашем каталоге только артикулы без наименований. У заказчика же помимо артикулов еще и название товара, т.е. много лишнего. И вам надо понять какие товары присутствуют в вашем каталоге, а какие нет:

Стандартных формул в Excel для подобного поиска и сравнения нет. Конечно, можно попробовать применить ВПР с подстановочными символами сначала к одной таблице, а затем к другой. Но если подобную операцию необходимо проделывать раз за разом, то прописывать по несколько формул к каждой таблице прямо скажем — не комильфо.
Поэтому я и решил сегодня продемонстрировать формулу, которая без всяких доп. манипуляций поможет такое сравнение сделать. Чтобы разобраться самостоятельно рекомендую скачать файл:
Скачать файл:

Tips_All_AnyoneOfArray.xls (49,5 KiB, 14 414 скачиваний)

На листе «Заказ» в этом файле таблица, полученная от заказчика, а на листе «Каталог» наши артикулы.
Сама формула на примере файла будет выглядеть так:

=ПРОСМОТР(2;1/ПОИСК(Каталог!$A$2:$A$11; A2 );Каталог!$A$2:$A$11)
=LOOKUP(2,1/SEARCH(Каталог!$A$2:$A$11,A2),Каталог!$A$2:$A$11)
эта формула вернет название артикула, если в тексте есть хоть один артикул из каталога и #Н/Д (#N/A) если артикул не найден в каталоге.
Прежде чем облагородить эту формулу всякими дополнениями(вроде виде убирания ненужных #Н/Д ) давайте разберемся как она работает.
Функция ПРОСМОТР (LOOKUP) ищет заданное значение( 2 ) в указанном диапазоне(массиве — второй аргумент). В качестве диапазона обычно приводится массив ячеек, но функция ПРОСМОТР имеет первую нужную нам особенность — она старается преобразовать непосредственно в массив любое выражение, записанное вторым аргументом. Иными словами она вычисляет выражение в этом аргументе, чем мы и пользуемся, подставив в качестве второго аргумента выражение: 1/ПОИСК(Каталог!$A$2:$A$11;A2) . Часть ПОИСК(Каталог!$A$2:$A$11;A2) ищет поочередно каждое значение из списка Каталога в ячейке A2 (наименование из таблицы Заказчика). Если значение найдено, то возвращается номер позиции первого символа найденного значения. Если значение не найдено — возвращается значение ошибки #ЗНАЧ!(#VALUE!). Теперь вторая особенность: функция требует расположения данных в массиве в порядке возрастания. Если данные расположены иначе — функция будет просматривать массив до тех пор, пока не найдет значение больше искомого, но максимально к нему приближенное(хотя если данные позволяют — для более точного поиска все же лучше отсортировать список по возрастанию). Поэтому сначала мы 1 делим на выражение ПОИСК(Каталог!$A$2:$A$11;A2) , чтобы получить массив вида: <0,0181818181818182:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!>
Ну а в качестве искомого значения мы подсовываем функции число 2 — заведомо большее число, чем может вообще встретиться в массиве(т.к. единица, поделенная на любое число будет меньше двух). И как результат мы получим позицию в массиве, в которой встречается последнее совпадение из каталога. После чего функция ПРОСМОТР запомнит эту позицию и вернет значение из массива Каталог!$A$2:$A$11 (третий аргумент), записанное в этом массиве для этой позиции.
Вы можете просмотреть этапы вычисления функции самостоятельно для каждой ячейки, я здесь просто приведу этапы чуть в расширенном для понимания виде:

Теперь немного облагородим функцию и сделаем еще пару реализаций
Реализация 1:
Вместо артикулов и #Н/Д выведем для найденных позиций «Есть» , а для отсутствующих «Не найден в каталоге» :
=ЕСЛИ(ЕНД(ПРОСМОТР(2;1/ПОИСК(Каталог!$A$2:$A$11;A2)));»Не найден в каталоге»;»Есть»)
=IF(ISNA(LOOKUP(2,1/SEARCH(Каталог!$A$2:$A$11,A2))),»Не найден в каталоге»,»Есть»)
работа функции проста — с ПРОСМОТР(LOOKUP) разобрались, поэтому остались только ЕНД и ЕСЛИ.
ЕНД (ISNA) возвращает ИСТИНА (TRUE) если выражение внутри неё возвращает значение ошибки #Н/Д (#N/A) и ЛОЖЬ (FALSE) если выражение внутри не возвращает значение этой ошибки.
ЕСЛИ (IF) возвращает то, что указано вторым аргументом если выражение в первом равно ИСТИНА (TRUE) и то, что указано третьим аргументом, если выражение первого аргумента ЛОЖЬ (FALSE) .

Реализация 2:
Вместо #Н/Д выведем «Не найден в каталоге» , но при этом если артикулы найдены — выведем названия этих артикулов:
=ЕСЛИОШИБКА(ПРОСМОТР(2;1/ПОИСК(Каталог!$A$2:$A$11;A2);Каталог!$A$2:$A$11);»Нет в каталоге»)
=IFERROR(LOOKUP(2,1/SEARCH(Каталог!$A$2:$A$11,A2),Каталог!$A$2:$A$11),»Нет в каталоге»)
Про функция ЕСЛИОШИБКА (IFERROR) я подробно рассказывал в этой статье: Как в ячейке с формулой вместо ошибки показать 0.
Если вкратце, то если выражение, заданное первым аргументом функции, возвращает значение любой ошибки, то функция вернет то, что записано вторым аргументом(в нашем случае это текст «Не найден в каталоге» ). Если же выражение не возвращает ошибку, то функция ЕСЛИОШИБКА запишет то значение, которое было получено выражением в первом аргументе(в нашем случае это будет наименование артикула).

Реализация 3
Надо не просто определить какому артикулу соответствует, но и вывести цену для наименования по этому артикулу(сами цены должны быть расположены в столбце B листа Каталог):
=ЕСЛИОШИБКА(ПРОСМОТР(2;1/ПОИСК(Каталог!$A$2:$A$11;A2);Каталог!$B$2:$B$11);»»)
=IFERROR(LOOKUP(2,1/SEARCH(Каталог!$A$2:$A$11,A2),Каталог!$B$2:$B$11),»»)

Пара важных замечаний:

  • данные на листе с артикулами не должны содержать пустых ячеек . Иначе с большой долей вероятности формула будет возвращать значение именно пустой ячейки, а не то, которое подходит под условия поиска
  • формула осуществляет поиск таким образом, что ищется любое совпадение. Например, в качестве артикула записана цифра 1, а в строке наименований может встречаться помимо целой 1 еще и 123, 651123, FG1412NM и т.п. Для всех этих наименований может быть подобран артикул 1, т.к. он содержится в каждом наименовании. Как правило это может произойти, если артикул 1 расположен в конце списка

Поэтому желательно перед использованием формулы отсортировать список по возрастанию(от меньшего к большему, от А до Я).

В приложенном в начале статьи примере вы найдете все разобранные варианты.

Если же вам понадобится выводить все наименования, то можно воспользоваться функцией СОДЕРЖИТ_ОДНО_ИЗ из моей надстройки MulTEx.

Статья помогла? Поделись ссылкой с друзьями!

Поиск значения в столбце и строке таблицы Excel

Имеем таблицу, в которой записаны объемы продаж определенных товаров в разных месяцах. Необходимо в таблице найти данные, а критерием поиска будут заголовки строк и столбцов. Но поиск должен быть выполнен отдельно по диапазону строки или столбца. То есть будет использоваться только один из критериев. Поэтому здесь нельзя применить функцию ИНДЕКС, а нужна специальная формула.

Поиск значений в таблице Excel

Для решения данной задачи проиллюстрируем пример на схематической таблице, которая соответствует выше описанным условиям.

Лист с таблицей для поиска значений по вертикали и горизонтали:

Над самой таблицей расположена строка с результатами. В ячейку B1 водим критерий для поискового запроса, то есть заголовок столбца или название строки. А в ячейке D1 формула поиска должна возвращать результат вычисления соответствующего значения. После чего в ячейке F1 сработает вторая формула, которая уже будет использовать значения ячеек B1 и D1 в качестве критериев для поиска соответствующего месяца.

Поиск значения в строке Excel

Теперь узнаем, в каком максимальном объеме и в каком месяце была максимальная продажа Товара 4.

Чтобы выполнить поиск по столбцам следует:

  1. В ячейку B1 введите значение Товара 4 – название строки, которое выступит в качестве критерия.
  2. В ячейку D1 введите следующую формулу:
  3. Для подтверждения после ввода формулы нажмите комбинацию горячих клавиш CTRL+SHIFT+Enter, так как формула должна быть выполнена в массиве. Если все сделано правильно, в строке формул появятся фигурные скобки.
  4. В ячейку F1 введите вторую формулу:
  5. Снова Для подтверждения нажмите комбинацию клавиш CTRL+SHIFT+Enter.

Найдено в каком месяце и какая была наибольшая продажа Товара 4 на протяжении двух кварталов.

Принцип действия формулы поиска значения в строке Excel:

В первом аргументе функции ВПР (Вертикальный ПРосмотр) указывается ссылка на ячейку где находится критерий поиска. Во втором аргументе указывается диапазон ячеек для просмотра в процессе поиска. В третьем аргументе функции ВПР должен указываться номер столбца, из которого следует взять значение на против строки с именем Товар 4. Но так как нам заранее не известен этот номер мы с помощью функции СТОЛБЕЦ создаем массив номеров столбцов для диапазона B4:G15.

Это позволяет функции ВПР собрать целый массив значений. В результате в памяти хранится все соответствующие значения каждому столбцу по строке Товар 4 (а именно: 360; 958; 201; 605; 462; 832). После чего функции МАКС остается только взять из этого массива максимальное число и возвратить в качестве значения для ячейки D1, как результат вычисления формулы.

Как видно конструкция формулы проста и лаконична. На ее основе можно в похожий способ находить для определенного товара и другие показатели. Например, минимальное или среднее значение объема продаж используя для этого функции МИН или СРЗНАЧ. Вам ни что не препятствует, чтобы приведенный этот скелет формулы применить с использованием более сложных функций для реализации максимально комфортного анализа отчета по продажам.

Как получить заголовки столбцов по зачиню одной ячейки?

Например, как эффектно мы отобразили месяц, в котором была максимальная продажа, с помощью второй формулы. Не сложно заметить что во второй формуле мы использовали скелет первой формулы без функции МАКС. Главная структура формулы: ВПР(B1;A5:G14;СТОЛБЕЦ(B5:G14);0). Мы заменили функцию МАКС на ПОИСКПОЗ, которая в первом аргументе использует значение, полученное предыдущей формулой. Оно теперь выступает в качестве критерия для поиска месяца. И в результате функция ПОИСКПОЗ нам возвращает номер столбца 2 где находится максимальное значение объема продаж для товара 4. После чего в работу включается функция ИНДЕКС, которая возвращает значение по номеру сроки и столбца из определенного в ее аргументах диапазона. Так как у нас есть номер столбца 2, а номер строки в диапазоне где хранятся названия месяцев в любые случаи будет 1. Тогда нам осталось функцией ИНДЕКС получить соответственное значение из диапазона B4:G4 – Февраль (второй месяц).

Поиск значения в столбце Excel

Вторым вариантом задачи будет поиск по таблице с использованием названия месяца в качестве критерия. В такие случаи мы должны изменить скелет нашей формулы: функцию ВПР заменить ГПР, а функция СТОЛБЕЦ заменяется на СТРОКА.

Это позволит нам узнать какой объем и какого товара была максимальная продажа в определенный месяц.

Чтобы найти какой товар обладал максимальным объемом продаж в определенном месяце следует:

  1. В ячейку B2 введите название месяца Июнь – это значение будет использовано в качестве поискового критерия.
  2. В ячейку D2 введите формулу:
  3. Для подтверждения после ввода формулы нажмите комбинацию клавиш CTRL+SHIFT+Enter, так как формула будет выполнена в массиве. А в строке формул появятся фигурные скобки.
  4. В ячейку F1 введите вторую формулу:
  5. Снова Для подтверждения нажмите CTRL+SHIFT+Enter.

Принцип действия формулы поиска значения в столбце Excel:

В первом аргументе функции ГПР (Горизонтальный ПРосмотр) указываем ссылку на ячейку с критерием для поиска. Во втором аргументе указана ссылка на просматриваемый диапазон таблицы. Третий аргумент генерирует функция СТРОКА, которая создает в памяти массив номеров строк из 10 элементов. Так как в табличной части у нас находится 10 строк.

Далее функция ГПР поочередно используя каждый номер строки создает массив соответственных значений продаж из таблицы по определенному месяцу (Июню). Далее функции МАКС осталось только выбрать максимальное значение из этого массива.

Далее немного изменив первую формулу с помощью функций ИНДЕКС и ПОИСКПОЗ, мы создали вторую для вывода названия строк таблицы по зачиню ячейки. Название соответствующих строк (товаров) выводим в F2.

ВНИМАНИЕ! При использовании скелета формулы для других задач всегда обращайте внимание на второй и третий аргумент поисковой функции ГПР. Количество охваченных строк в диапазоне указанного в аргументе, должно совпадать с количеством строк в таблице. А также нумерация должна начинаться со второй строки!

По сути содержимое диапазона нас вообще не интересует, нам нужен просто счетчик строк. То есть изменить аргументы на: СТРОКА(B2:B11) или СТРОКА(С2:С11) – это никак не повлияет на качество формулы. Главное, что в этих диапазонах по 10 строк, как и в таблице. И нумерация начинается со второй строки!

Илон Маск рекомендует:  Шаблон сайта компании (синий) HTML, JS, CSS, 5 страниц
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL