# 字串

### 什麼是字串

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

### 建立字串

字串可以用於多種應用，包括定義自訂參數、註解文件集，以及剖析文字式資料集。字串節點位於 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. 最終的輸出已將最後兩個項目合併為一個。

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