# 字串

### 什麼是字串

正式的說法是，**字串**是字元的序列，表示文字常數或某些類型的變數。非正式的說法是，字串是文字式的程式設計行話。我們曾使用數字 (整數與小數) 來驅動參數，現在使用文字也可以做到這一點。

### 建立字串

字串可以用於多種應用，包括定義自訂參數、註解文件集，以及剖析文字式資料集。字串節點位於 Core > Input 。

以上範例節點是字串。數字可以表示為字串、字母或文字陣列。

!

## 練習

> 按一下下方的連結下載範例檔案。
>
> 附錄中提供完整的範例檔案清單。

### 查詢字串

透過查詢字串，您可以快速剖析大量資料。我們將討論一些基本作業，這些作業可以加快工作流程，有助於提高軟體互通性。

以下影像將考慮來自外部工作表的資料字串。該字串表示 XY 平面內某矩形的頂點。接下來在小練習中詳細瞭解某些字串分割作業：

!

> 1. 「;」分隔符號分隔矩形的每個頂點。這會建立清單，每個頂點有 3 個項目。

!

> 1. 透過按一下節點中部的「*+*」，可以建立新分隔符號。
> 2. 在圖元區加入「*,*」字串，並插入新的分隔符號輸入。
> 3. 現在結果將產生含十個項目的清單。節點會先根據 *separator0* 進行分割，然後根據 *separator1* 進行分割。

雖然以上項目清單可能看起來像數字，但是在 Dynamo 中，仍將其視為單獨的字串。若要建立點，需要將其資料類型從字串轉換為數字。我們使用 **String.ToNumber** 節點來達成

!

> 1. 本節點非常簡單。將 **String.Split** 的結果插入輸入。輸出看上去似乎相同，但現在資料類型是 *number* 而不是 *string*。

透過其他某些基本作業，我們現在已根據原始字串輸入，在原點繪製了三角形。

!

### 操控字串

由於字串是一般文字物件，因此可以適用於多種應用。接下來我們看一下在 Dynamo 的 Core > String 中的一些主要動作：

這種方法可以按順序合併兩個字串。它會提取清單中的每個文字字串，然後建立一個合併後的字串。

以下表示連接三個字串：

\![連接](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-cht/.gitbook/assets/strings%20-%20manipulating%20strings%2001.jpg)

> 1. 按一下節點中心的「+/-」按鈕，可以加上或減去連接的字串。
> 2. 輸出是一個連接後的字串，其中包括空格與標點。

接合方法非常類似於連接，只是會加入標點。

如果您曾使用 Excel，可能會遇到 CSV 檔案。CSV 表示以逗號分隔的值。可以使用逗號 (或此案例中的兩條虛線) 做為分隔符號搭配 **String.Join** 節點，以建立類似的資料結構。

以下影像表示接合兩個字串：

!

> 1. 藉由分隔符號輸入，可以建立對接合後的字串進行分割的字串。

### 使用字串

在此練習中，我們將使用字串的查詢與操控方法解構 Robert Frost 的 [Stopping By Woods on a Snowy Evening](http://www.poetryfoundation.org/poem/171621) 的最後一節。這並不是字串最實用的應用，但將其套用至清晰的節奏與韻律時，將有助於我們掌握概念字串的動作。

接下來從這一節的基本字串分割開始。首先，我們注意到書寫格式的依據是逗號。我們將使用此格式將每行分隔為個別項目。

!

> 1. 將基準字串貼至 **String** 節點。
> 2. 另一個 **String** 節點用來表示分隔符號。在此案例中，我們將使用逗號。
> 3. 將 **String.Split** 節點加入圖元區，並連接至兩個字串。
> 4. 輸出顯示我們現在已將各行分隔為個別元素。

現在，我們來到詩詞美妙的部分：最後兩行。原始的一節是一個資料項目。在第一步，我們已將此資料分隔為個別項目。現在，我們需要搜尋要尋找的文字。雖然我們\_可以\_透過選取清單中的最後兩個項目來實現這一點，但是如果是整本書，我們不希望通讀所有內容然後手動隔離元素。

!

> 1. 我們不是手動搜尋，而是使用 **String.Contains** 節點對一組字元執行搜尋。這類似於文字處理器中的「尋找」指令。在此案例中，會傳回「true」，若項目中找到該子字串，會傳回「false」。
> 2. 在 *searchFor* 輸入中，我們會定義將在該節中尋找的子字串。接下來使用 **String** 節點搭配文字「And miles」。
> 3. 輸出是 false 與 true 的清單。在下一步中，我們使用此布林邏輯對元素進行篩選。

\![分割](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-cht/.gitbook/assets/strings%20-%20working%20with%20strings%2003.jpg)

> 1. 我們將使用 **List.FilterByBoolMask** 節點篩選出 false 與 true。「in」輸出會傳回「遮罩」輸入為「true」的陳述式，而「out」輸出會傳回「遮罩」輸入為「false」的陳述式。
> 2. 「in」的輸出與預期相同，是該節詩句的最後兩行。

現在，我們希望合併這兩行，以重複這節詩句。檢視上一步的輸出時，我們注意有清單中有兩個項目：

!

> 1. 透過兩個 **List.GetItemAtIndex** 節點，我們可以使用值 0 與 1 做為索引輸入以隔離項目。
> 2. 每個節點的輸出依序提供最後兩行。

為了將這兩個項目合併為一個，我們使用 **String.Join** 節點：

\![分割字串](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-cht/.gitbook/assets/strings%20-%20working%20with%20strings%2005.jpg)

> 1. 加入 **String.Join** 節點後，我們注意到需要分隔符號。
> 2. 為了建立分隔符號，我們在圖元區加入 **String** 節點，然後鍵入逗號。
> 3. 最終的輸出已將最後兩個項目合併為一個。

這看起來似乎要執行很多工作才能隔離最後兩行，的確，字串作業通常需要某些前置工作。但這些作業可擴充，而且可以相對輕鬆地套用至大型資料集。如果您以參數方式使用工作表與互通性，請確保考慮到字串作業。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/zh-tw/5_essential_nodes_and_concepts/5-3_the-building-blocks-of-programs/4-strings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
