

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Step Functions 如何剖析輸入 CSV 檔案
<a name="example-csv-parse-dist-map"></a>

**管理狀態和轉換資料**  
了解如何[使用變數在狀態與使用 JSONata 轉換資料之間傳遞資料](workflow-variables.md)。 [ JSONata](transforming-data.md)

Step Functions 會根據下列規則剖析以文字分隔的檔案：
+ 分隔欄位的分隔符號由 *ReaderConfig* `CSVDelimiter`中的 指定。分隔符號預設為 `COMMA`。
+ Newlines 是分隔**記錄**的分隔符號。
+ 欄位視為字串。對於資料類型轉換，請使用 中的`States.StringToJson`內部 函數[ItemSelector （地圖）](input-output-itemselector.md)。
+ 不需要雙引號 (" ") 來括住字串。不過，以雙引號括住的字串可包含逗號和換行，而不做為記錄分隔符號。
+ 您可以重複雙引號來保留雙引號。
+ 反斜線 (\$1) 是逸出特殊字元的另一種方式。反斜線僅適用於其他反斜線、雙引號和設定的欄位分隔符號，例如逗號或縱線。反斜線後面接著任何其他字元會被無提示移除。
+ 您可以重複斜線來保留斜線。例如：

  ```
  path,size
  C:\\Program Files\\MyApp.exe,6534512
  ```
+ 逸出雙引號的反斜線 (`\"`) 只有在包含在組內時才有效，因此我們建議重複逸出雙引號：`""`。
+ 如果資料列中的欄位數目**小於** 標頭中的欄位數目，Step Functions 會提供缺少值**的空字串**。
+ 如果資料列中的欄位數目**超過**標頭中的欄位數目，Step Functions **會略過**其他欄位。

**剖析輸入 CSV 檔案的範例**  
假設您已提供名為 的 CSV 檔案`myCSVInput.csv`，其中包含一列做為輸入。然後，您已將此檔案存放在名為 的 Amazon S3 儲存貯體中`amzn-s3-demo-bucket`。CSV 檔案如下所示。

```
abc,123,"This string contains commas, a double quotation marks (""), and a newline (
)",{""MyKey"":""MyValue""},"[1,2,3]"
```

下列狀態機器會讀取此 CSV 檔案，並使用 [ItemSelector （地圖）](input-output-itemselector.md)來轉換部分欄位的資料類型。

```
{
  "StartAt": "Map",
  "States": {
    "Map": {
      "Type": "Map",
      "ItemProcessor": {
        "ProcessorConfig": {
          "Mode": "DISTRIBUTED",
          "ExecutionType": "STANDARD"
        },
        "StartAt": "Pass",
        "States": {
          "Pass": {
            "Type": "Pass",
            "End": true
          }
        }
      },
      "End": true,
      "Label": "Map",
      "MaxConcurrency": 1000,
      "ItemReader": {
        "Resource": "arn:aws:states:::s3:getObject",
        "ReaderConfig": {
          "InputType": "CSV",
          "CSVHeaderLocation": "GIVEN",
          "CSVHeaders": [
            "MyLetters",
            "MyNumbers",
            "MyString",
            "MyObject",
            "MyArray"
          ]
        },
        "Parameters": {
          "Bucket": "amzn-s3-demo-bucket",
          "Key": "myCSVInput.csv"
        }
      },
      "ItemSelector": {
        "MyLetters.$": "$$.Map.Item.Value.MyLetters",
        "MyNumbers.$": "States.StringToJson($$.Map.Item.Value.MyNumbers)",
        "MyString.$": "$$.Map.Item.Value.MyString",
        "MyObject.$": "States.StringToJson($$.Map.Item.Value.MyObject)",
        "MyArray.$": "States.StringToJson($$.Map.Item.Value.MyArray)"
      }
    }
  }
}
```

當您執行此狀態機器時，會產生下列輸出。

```
[
  {
    "MyNumbers": 123,
    "MyObject": {
      "MyKey": "MyValue"
    },
    "MyString": "This string contains commas, a double quote (\"), and a newline (\n)",
    "MyLetters": "abc",
    "MyArray": [
      1,
      2,
      3
    ]
  }
]
```