# 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
];
```

結果表格

| InputText | SearchFor | 發生 | FindOneOf\_符合項目 |
| --- | --- | --- | --- |
| 我的範例文字字串 | et%s | 1 | 4 |
| 我的範例文字字串 | et%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')`

結果表格

| TicketID | CustomerComment | FindOneOf(客戶評論, '!,@,#') | If(FindOneOf(客戶評論, '!,@,#')&gt;0,'高優先級','一般優先級') |
| --- | --- | --- | --- |
| 1 | I need this order ASAP! (我需要盡快取得此訂單！) | 23 | 高優先順序 |
| 2 | Please confirm my order @12345. (請確認我的訂單 @12345。) | 25 | 高優先順序 |
| 3 | Can you update my order? (您可以更新我的訂單嗎？) | 0 | 普通優先順序 |
| 4 | I have a question about #discount. (我對折扣有疑問。) | 25 | 高優先順序 |
| 5 | Thank you! (謝謝您！) | 10 | 高優先順序 |

比較 `FindOneOf` 函數的輸出與指令碼中載入的原始 `CustomerComment` 字串值。藉由使用值 `!,@,#`，函數成功傳回了這些字元在評論字串中出現的位置。最終量值使用條件式 `If` 陳述式，以識別包含任何搜尋字元的記錄並將其指派為 `High Priority`。如果找不到任何搜尋字元 `!,@,#` (例如第 3 列)，則會將工單分類為 `Normal Priority`。