【ChatGPT】構造化プログラミング式プロンプトの追記（フィルター編）

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::

　どうも、カーブミラーです。

　今回は、
　　まず、記述ミスがありましたので
　　　報告させてください。
[【ChatGPTとすべてのProgrammerに捧ぐ】構造化プログラミング式プロンプト作成術](https://qiita.com/kabumira/items/e1a26dd6309a1eb0f603 "【ChatGPTとすべてのProgrammerに捧ぐ】構造化プログラミング式プロンプト作成術")
　で、記述ミスがありましたので、
　　訂正させてください。
>　制御の終わりには、
　　「制御文end」です。
　　　カッコ閉じですね。

　と書きましたが、間違えました。
　正しくは、
>　制御の終わりには、
　　「**end制御文**」です。
　　　カッコ閉じですね。

　です。
　すでに、
　　さきの記事は修整済です。
　　　ご迷惑お掛けいたしました。
***
　では、
　　記述しなかった事柄を記述します。

　フィルターです。

　おおもとのjinja2には、
　　たくさんのフィルターがありますが、
　　　ChatGPTさんが理解できる、
　　　　という制約がありますので、
　　　　　ここでは、とりあえず、
　　　　　　文字列操作とリストの
　　　　　　　フィルターを記述します。

　　　　　　　教えてくれたのが、
　　　　　　　　この２種類なので。

　以下に
　　フィルターの説明と
　　　サンプルコードを示します。

***
　まずは、文字列操作フィルター。
　　→「{{ message | length }}」
　　　とmessageの長さを求めた
　　　　コードをチラッと書きました。
　　　　　「|」は、「パイプ」と
　　　　　　呼ばれるものです。
　　　　　lengthはダメとはいえ、
　　　　　　注意すれば、使えます。
```Python:使い方&サンプル
1. `capitalize`:
　　文字列の最初の文字を大文字に変換します。

{% set text = "hello" %}
{{ text | capitalize }}

出力結果: "Hello"

2. `lower`:
　　文字列をすべて小文字に変換します。

{% set text = "HELLO" %}
{{ text | lower }}

出力結果: "hello"

3. `upper`:
　　文字列をすべて大文字に変換します。

{% set text = "hello" %}
{{ text | upper }}

出力結果: "HELLO"

4. `title`:
　　文字列内の各単語の最初の文字を大文字に変換します。

{% set text = "hello world" %}
{{ text | title }}

出力結果: "Hello World"

5. `length`:
　　文字列（ダメ）やリストなどの要素の数や長さを返します。

{% set names = ['John', 'Jane', 'Bob'] %}
{{ names | length }}

出力結果: 3

6. `default`:
　　変数が存在しない場合にデフォルトの値を設定します。

{% set username = None %}
{{ username | default("Guest") }}

出力結果: "Guest" (usernameが存在しない場合にデフォルトの値を表示)

7. `join`:
　　リストの要素を指定した文字列で結合します。

{% set fruits = ['apple', 'banana', 'orange'] %}
{{ fruits | join(", ") }}

出力結果: "apple, banana, orange"

8. `replace`:
　　文字列内の指定した部分文字列を別の文字列に置換します。

{% set text = "Hello, World!" %}
{{ text | replace("Hello", "Hi") }}

出力結果: "Hi, World!"

9. `truncate`:
　　文字列を指定した長さに切り詰めます。

{% set text = "This is a long text that needs to be truncated." %}
{{ text | truncate(20) }}

出力結果: "This is a long text..."

10. `date`:
　　日付や時刻を指定した形式で表示します。

{% set current_date = now() %}
{{ current_date | date("Y年m月d日 H:i") }}

出力結果: "2023年06月11日 13:45"
```

***
　次は、配列（リスト）のフィルター
```Python:使い方&サンプル
reverse
　　リストの要素を逆順にする 。
{% set numbers = [1, 2, 3, 4, 5] %}
{{ numbers | reverse }}

出力結果:　[5, 4, 3, 2, 1]

select
　　特定の条件を満たす要素のみをフィルタリングする。
{% set numbers = [1, 2, 3, 4, 5] %}
{{ numbers | select('even') }}

出力結果:　[2, 4]

sum
　　リストの要素を合計する。
{% set numbers = [1, 2, 3, 4, 5] %}
{{ numbers | sum }}

出力結果:　15

unique
　　リスト内の要素を重複なしで取得する。
{% set numbers = [1, 2, 2, 3, 3, 4, 5] %}
{{ numbers | unique }}

出力結果:　[1, 2, 3, 4, 5]

reject
　　特定の条件を満たさない要素のみをフィルタリングする。
{% set numbers = [1, 2, 3, 4, 5] %}
{{ numbers | reject('odd') }}

出力結果:　[2, 4]

sort
　　リストの要素を順序付ける。
{% set numbers = [3, 1, 4, 2, 5] %}
{{ numbers | sort }}

出力結果:　[1, 2, 3, 4, 5]

slice
　　リストの要素を一部取得する。
{% set numbers = [1, 2, 3, 4, 5] %}
{{ numbers | slice(1, 3) }}

出力結果:　[2, 3, 4]

random
　　リストの要素を指定した数だけランダムに取得する。
{% set numbers = [1, 2, 3, 4, 5] %}
{{ numbers | random(3) }}

出力結果:　ランダムな結果（例: [2, 3, 1]）

map
　　リストの要素を特定の条件に基づいてマッピングする。
{% set numbers = [1, 2, 3, 4, 5] %}
{{ numbers | map('double') }}

出力結果:　[2, 4, 6, 8, 10]
```
　フィルターもサンプルも
　　ChatGPTさんからの
　　　ご提供です。
　　　　感謝！

　多少、手を加えました。
　　フォーマットが
　　　違うのは、そのためです。

　だって、別々に出すんだもん。
***
なお、英語版ですが、
　詳細は、
　　jinjaのドキュメント参照してね。
[Template Designer Documentation — Jinja Documentation (3.1.x)](https://jinja.palletsprojects.com/en/3.1.x/templates/?highlight=safe#jinja-filters.abs "Template Designer Documentation — Jinja Documentation (3.1.x)")