# FindOneOf スクリプトおよびチャート関数

FindOneOf() は、文字列を検索して、指定された文字のセットのいずれかの文字が出現する位置を取得します。検索セットから任意の文字の N 番目に出現する位置が返されます (N は関数の 3 番目の任意のパラメーター)。3 番目のパラメーターが指定されない場合は、最初に出現したしたパラメーターが返されます。 一致するものがない場合は、0 が返されます。

構文:

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

戻り値データ型： 整数

引数

| 引数 | 説明 |
| --- | --- |
| text | 元の文字列。 |
| char\_set | text で検索する文字セット。 |
| count | 検索するいずれかの文字のうち、出現する文字を定義します。たとえば、値 2 は 2 番目の出現を検索します。 |

例: チャートの数式

| 例 | 結果 |
| --- | --- |
| `FindOneOf(  'my example text string', 'et%s' )` | 「`e`」は例の文字列の 4 番目の文字であるため、「`4`」を返します。 |
| `FindOneOf(  'my example text string', 'et%s', 3 )` | いずれかの文字 `e`、`t`、`%` または `s` が検索されるため 、`t` は 例の文字列の位置 `12` の3 番目に出現するため、「`12`」を返します。 |
| `FindOneOf(  'my example text string', '¤%&' )` | 例の文字列に `¤`、`%`、または `&` の文字が存在しないため、「`0`」を返します。 |

## 例 - FindOneOf の基本

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

#### チャートの数式

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 「`Example`」というデータ テーブルにロードされるデータセット。

* `Phrase` というデータ テーブルの 1 つの項目には、処理される元のテキスト文字列が格納されています。

ロード スクリプト

```
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` の位置にあります。各フレーズで 2 番目に出現する文字 `e` は、`20`、`12`、`0` (見つかりません) の位置にあります。同様に、文字「`e` または `y`」の最初の出現は、各フレーズのそれぞれ `8`、`7`、および `4` の位置にあります。`For a very long time` というフレーズの中で、「`e` または`y`」が最初に出てくるのは`8` の位置、`e` であり、2 番目に出てくるのは `10` の位置、`y` であることに注目してください。

[](https://help.qlik.com/en-US/cloud-services/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
];
```

結果テーブル

| InputText | SearchFor | 出現 | FindOneOf\_Matches |
| --- | --- | --- | --- |
| テキスト文字列の例 | et%s | 1 | 4 |
| テキスト文字列の例 | et%s | 3 | 12 |
| テキスト文字列の例 | ¤%& | 1 | 0 |

## 例 - FindOneOf のシナリオ

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

#### チャートの数式

概要

この例では、`FindOneOf` 関数を使用して、顧客注文のデータセット内の顧客コメントを分析し、対応が必要な注文を特定します。各注文には `CustomerComment` 項目があり、顧客は注文に関するメモやコメントを残すことができます。コメントを分析することで、緊急性や特別なリクエストを示す可能性のある「!」、「@」、「#」などの特定のキーワードや文字を識別できます。

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 「`Example`」というデータ テーブルにロードされるデータセット。

* データ テーブル内の次の項目:

  * `TicketID`、チケットの ID 番号

  * `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')`

結果テーブル

| TicketID | CustomerComment | FindOneOf(CustomerComment, '!,@,#') | If(FindOneOf(CustomerComment, '!,@,#')&gt;0,'High Priority','Normal Priority') |
| --- | --- | --- | --- |
| 1 | この注文は大至急で! | 23 | 高優先度 |
| 2 | 注文 @12345 を確認してください。 | 25 | 高優先度 |
| 3 | 注文の最新情報は? | 0 | 中優先度 |
| 4 | 割引について質問があります。 | 25 | 高優先度 |
| 5 | お疲れ様でした! | 10 | 高優先度 |

`FindOneOf` 関数の出力を、スクリプトにロードされた元の `CustomerComment` 文字列値と比較します。値 `!,@,#` を使用して、関数はコメント文字列内でこれらの文字が出現する位置を正常に返しました。最後のメジャーは、条件付き `If` ステートメントを使用して、検索文字のいずれかを含むレコードを識別し、これらを `High Priority` として割り当てます。検索文字 `!,@,#` が 1 つも見つからない場合 (例: 3 行目)、チケットは `Normal Priority` に分類されます。