# FindOneOf Функция скрипта и диаграммы

FindOneOf() выполняет поиск в строке, чтобы найти положение вхождения любого символа из набора указанных символов. Возвращается позиция N-го появления любого символа из поискового набора, где N ― необязательный третий параметр функции. Если третий параметр не указан, то возвращается первое вхождение. Если совпадений не найдено, возвращается значение 0.

Синтаксис:

FindOneOf(text, char\_set[, count])

Возвращаемые типы данных: целое

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Оригинальная строка. |
| char\_set | Набор символов для поиска в text. |
| count | Определяет, какое вхождение символов искать. Например, значение 2 служит для поиска второго вхождения. |

Пример: выражения диаграммы

| Пример | Результат |
| --- | --- |
| `FindOneOf(  'my example text string', 'et%s' )` | Возвращает `4`, так как буква `e` — четвертый символ в строке примера. |
| `FindOneOf(  'my example text string', 'et%s', 3 )` | Возвращает `12`, так как поиск выполняется для любого из символов `e`, `t`, `%` или `s` и `t` является третьим элементом и его позиция `12` в строке примера. |
| `FindOneOf(  'my example text string', '¤%&' )` | Возвращает `0`, так как в строке примера нет ни одного из символов `¤`, `%` или `&`. |

## Пример. Основы использования функции FindOneOf

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/FindOneOf.htm)

#### Выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем `Example`.

* Одно поле в таблице данных под именем `Phrase`, в котором содержатся оригинальные текстовые строки, подлежащие обработке.

Скрипт загрузки

```
Example:
Load *
Inline
[Phrase
Many tiny beads
For a very long time
Has the potential for growth
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:

* ` Phrase
                                   `

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

* `=FindOneOf(Phrase, 'e', 1)`

* `=FindOneOf(Phrase, 'y', 1)`

* `=FindOneOf(Phrase, 'ey', 1)`

* `=FindOneOf(Phrase, 'e', 2)`

* `=FindOneOf(Phrase, 'y', 2)`

* `=FindOneOf(Phrase, 'ey', 2)`

Результирующая таблица

| Phrase | FindOneOf(Phrase, 'e', 1) | FindOneOf(Phrase, 'y', 1) | FindOneOf(Phrase, 'ey', 1) | FindOneOf(Phrase, 'e', 2) | FindOneOf(Phrase, 'y', 2) | FindOneOf(Phrase, 'ey', 2) |
| --- | --- | --- | --- | --- | --- | --- |
| For a very long time | 8 | 10 | 8 | 20 | 0 | 10 |
| Has the potential for growth | 7 | 0 | 7 | 12 | 0 | 12 |
| Many tiny beads | 12 | 4 | 4 | 0 | 9 | 9 |

Для каждого вычисляемого измерения на выходе выдается позиция вхождения символов из поискового набора для каждой фразы. Например, первое вхождение буквы `e` встречается в позициях `8`, `7` и `12` для каждой фразы соответственно. Второе вхождение буквы `e` в каждой фразе встречается в позициях `20`, `12` и `0` (не найдено). Например, первое вхождение букв '`e` или `y`' встречается в позициях `8`, `7` и `4` для каждой фразы соответственно. Обратите внимание, что во фразе `For a very long time` первое вхождение '`e` или `y`' находится в позиции `8`, `e`, а второе вхождение ― в позиции `10`, `y`.

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/FindOneOf.htm)

#### Скрипт загрузки

Следующий код показывает, как использовать эту функцию в скрипте загрузки.

```
Example:
Load *, FindOneOf(InputText, SearchFor, Occurrence) AS FindOneOf_Matches
Inline
InputText, SearchFor, Occurrence
my example text string, et%s,1
my example text string, et%s,3
my example text string, ¤%&,1
];
```

Результирующая таблица

| Входной текст | Искать | Вхождение | НайтиОдинИз\_Совпадения |
| --- | --- | --- | --- |
| моя примерная текстовая строка | и%s | 1 | 4 |
| моя примерная текстовая строка | и%s | 3 | 12 |
| моя примерная текстовая строка | ¤%& | 1 | 0 |

## Пример. Сценарий использования функции FindOneOf

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/FindOneOf.htm)

#### Выражение диаграммы

Обзор

В этом примере функция `FindOneOf` используется для анализа комментариев клиентов в наборе данных заказов клиентов и выявления заказов, которые могут требовать действия. В каждом заказе есть поле `CustomerComment`, где покупатели могут оставлять заметки или комментарии к своим заказам. Анализируя комментарии, можно выявить специфические ключевые слова или символы, такие как «!», «@», «#», которые могут указывать на срочность или особые запросы.

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем `Example`.

* Следующие поля в таблице данных:

  * `TicketID` ― идентификационный номер билета

  * `CustomerComment` ― исходная текстовая строка

Скрипт загрузки

```
Example:
Load * inline [
TicketID, CustomerComment
1, I need this order ASAP!
2, Please confirm my order @12345.
3, Can you update my order?
4, I have a question about #discount.
5, Thank you!
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* ` TicketID
                                   `

* `CustomerComment`

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

* `=FindOneOf(CustomerComment, '!,@,#')`

* `=If(FindOneOf(CustomerComment, '!,@,#')>0,'High Priority','Normal Priority')`

Результирующая таблица

| ID билета | Комментарий клиента | НайтиОдноИз(КомментарийКлиента, '!,@,#') | Если(НайтиОдинИз(КомментарийКлиента, '!,@,#')&gt;0,'Высокий приоритет','Обычный приоритет') |
| --- | --- | --- | --- |
| 1 | I need this order ASAP! (Мне нужен этот заказ как можно скорее!) | 23 | High Priority (Высокий приоритет) |
| 2 | Please confirm my order @12345. (Пожалуйста, подтвердите мой заказ @12345.) | 25 | High Priority (Высокий приоритет) |
| 3 | Can you update my order? (Можете ли вы обновить мой заказ?) | 0 | Normal Priority (Нормальный приоритет) |
| 4 | I have a question about #discount. (У меня есть вопрос по поводу #скидки.) | 25 | High Priority (Высокий приоритет) |
| 5 | Спасибо! | 10 | High Priority (Высокий приоритет) |

Сравните вывод функции `FindOneOf` с исходными значениями строк `CustomerComment`, загруженными в скрипт. Используя значения `!,@,#`, функция успешно вернула позицию, где эти символы встречаются в строке комментария. Последняя мера использует условный оператор `If` для выявления записей, содержащих любой из искомых символов, и классифицирует их как `High Priority`. Если ни один из искомых символов `!,@,#` не найден, например, в строке 3, то билет классифицируется как `Normal Priority`.