# フラットファイルから再帰ループを作成

FlatToHierarchyLoopファンクションを使えば、フラットファイルで定義されたレベルに基づいて再帰ループを作成できます。

## 始める前に

入力ストラクチャーと出力ストラクチャーを持つマップを作成済みであること。次のサンプルを使用できます。

## このタスクについて

この例では、タイトル、ページ番号、各エレメントのレベルに対応する番号を持つ目次を記述したCSVファイルを使います。エレメントがそのレベルに基づいてネストされているXMLファイルを作成したいとします。入力には次のサンプルを使います:

```
title,page,level
Introduction,3,1
Part 1,10,1
Chapter 1,10,2
Section 1,10,3
Section 2,31,3
Section 3,56,3
Chapter 2,80,2
Section 1,80,3
Section 2,102,3
Part 2,125,1
Chapter 1,125,2
Chapter 2,160,2
Section 1,160,3
Section 2,185,3
Conclusion,213,1
```

次のXMLサンプルを使えば、出力ストラクチャーを作成できます:

```
<contents>
	<entry>
		<title/>
		<page/>
	</entry>
	<entry>
		<title/>
		<page/>
	</entry>
</contents>
```

## 手順

1. 出力entryエレメントをクリックし、[Loop] (ループ)タブでFlatToHierarchyLoopファンクションを配置します。
2. 入力rowエレメントをInput Map Element引数に配置します。
3. 入力levelエレメントをLevel Numberエレメントに配置します。

   このファンクションは入力ファイルのlevelカラムにある数を使い、出力で再帰ループをストラクチャー化する方法を決定します。 ![levelエレメントの配置。](https://help.qlik.com/talend/ja-JP/data-mapper-functions-reference-guide/Resources/images/create_recursive_loop_01_flattohierarchyloop.png)
4. 入力rowエレメントを出力entryエレメントに配置し、titleとpageを自動的にマッピングさせます。

## タスクの結果

マップが設定され、次のようになります: ![マップ結果。](https://help.qlik.com/talend/ja-JP/data-mapper-functions-reference-guide/Resources/images/create_recursive_loop_02_map.png)

[Test Run] (テスト実行)機能を使えば結果を表示できます。この例では次のような出力が返されます。

```
<contents>
  <entry>
    <title>Introduction</title>
    <page>3</page>
  </entry>
  <entry>
    <title>Part 1</title>
    <page>10</page>
    <entry>
      <title>Chapter 1</title>
      <page>10</page>
      <entry>
        <title>Section 1</title>
        <page>10</page>
      </entry>
      <entry>
        <title>Section 2</title>
        <page>31</page>
      </entry>
      <entry>
        <title>Section 3</title>
        <page>56</page>
      </entry>
    </entry>
    <entry>
      <title>Chapter 2</title>
      <page>80</page>
      <entry>
        <title>Section 1</title>
        <page>80</page>
      </entry>
      <entry>
        <title>Section 2</title>
        <page>102</page>
      </entry>
    </entry>
  </entry>
  <entry>
    <title>Part 2</title>
    <page>125</page>
    <entry>
      <title>Chapter 1</title>
      <page>125</page>
    </entry>
    <entry>
      <title>Chapter 2</title>
      <page>160</page>
      <entry>
        <title>Section 1</title>
        <page>160</page>
      </entry>
      <entry>
        <title>Section 2</title>
        <page>185</page>
      </entry>
    </entry>
  </entry>
  <entry>
    <title>Conclusion</title>
    <page>213</page>
  </entry>
</contents>
```