

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Step Functions が入力 CSV ファイルを解析する方法
<a name="example-csv-parse-dist-map"></a>

**ステートの管理とデータの変換**  
[変数を使用したステート間のデータ受け渡し](workflow-variables.md)と [JSONata を使用したデータ変換](transforming-data.md)について説明します。

Step Functions は、次のルールに基づいてテキスト区切りファイルを解析します。
+ フィールドの区切り文字は *ReaderConfig* の `CSVDelimiter` で指定します。区切り記号のデフォルトは `COMMA` です。
+ 改行は**レコード**を分割する区切り文字です。
+ フィールドは文字列として扱われます。データ型変換には、[ItemSelector (Map)](input-output-itemselector.md) の `States.StringToJson` 組み込み関数を使用します。
+ 文字列を二重引用符 (" ") で囲む必要はありません。ただし、二重引用符で囲まれた文字列には、レコード区切り文字として機能しないカンマや改行を含めることができます。
+ 二重引用符は繰り返しにより保存できます。
+ バックスラッシュ (\$1) も特殊文字をエスケープする方法として使用できます。バックスラッシュは、他のバックスラッシュ、二重引用符、設定されたフィールド区切り記号 (カンマやパイプなど) と組み合わせてのみ機能します。バックスラッシュの後に他の文字が続く場合、そのバックスラッシュは警告なしに削除されます。
+ バックスラッシュは繰り返すことで保持できます。例えば、次のようになります。

  ```
  path,size
  C:\\Program Files\\MyApp.exe,6534512
  ```
+ 二重引用符をエスケープするバックスラッシュ (`\"`) は、ペアで含める必要があるため、二重引用符を繰り返してエスケープすること (`""`) をお勧めします。
+ 行のフィールド数がヘッダーのフィールド数より**少ない**場合、Step Functions は欠落している値に**空の文字列**を提供します。
+ 行のフィールド数がヘッダーのフィールド数よりも**多い**場合、Step Functions は追加のフィールドを**スキップ**します。

**入力 CSV ファイルの解析例**  
例えば、1 行を入力として含む `myCSVInput.csv` という CSV ファイルを指定したとします。このファイルが、`amzn-s3-demo-bucket` という Amazon S3 バケットに保存されました。CSV ファイルは次のとおりです。

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

次のステートマシンはこの CSV ファイルを読み取り、[ItemSelector (Map)](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
    ]
  }
]
```