Insert DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Insert DAT が入力テーブルに新規行・列を挿入し Contents で指定したセル値を書き込む流れを示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – 表に行や列を挿入する

Insert DATは、既存テーブルに行または列を挿入し、Contents パラメータで指定したセル値をその場で書き込む DATです。Insert で行 (row) / 列 (col) を選び、At で挿入位置 (Before First / After Last / Index) を指定、Contents でセルに書き込む値をスペース区切りで与えます。入力 DAT がテーブルでない場合は自動でテーブルに変換されてから挿入が走るため、Text DAT などの非テーブル入力でもそのまま接続できます。

主な用途 🎯

  • 既存テーブルへの行追加でログや観測値を末尾に蓄積していく動的テーブル運用
  • 既存テーブルへの列追加で新しいフィールドを後付けする schema 拡張
  • Contents パラメータでのセル初期値書き込みを 1 ノードで完結 (Insert + 値設定が同時)
  • At + Index による任意位置への挿入でテーブル先頭・末尾・指定インデックスを使い分け
  • Replace 機能による既存セル値の一括書き換えを行名マッチで複数行に同時適用

データフロー 🔄

入力テーブル DAT (テーブル以外は自動でテーブル化)

Insert DAT (Insert で行 / 列を選択、At + Index で位置決定、Contents で書き込むセル値を指定)

挿入された行 / 列に Contents の値が反映された出力テーブル

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Insert Page 📋

Insert (行 / 列の選択) .insert 🎛️

挿入する単位を行と列のどちらにするかを決定するメニューパラメータ

項目 内部名 説明
Row .row 1 行を挿入 (Contents が各セルの値として横方向に並ぶ)
Column .col 1 列を挿入 (Contents が各セルの値として縦方向に並ぶ)

At (挿入位置の選択) .at 📍

行または列をどこに挿入するかを決定するメニューパラメータ

項目 内部名 説明
Before First .start テーブルの先頭に挿入 (既存の行 / 列はすべて 1 つずつ後ろにずれる)
After Last .end テーブルの末尾に追加 (append、ログ蓄積などで多用)
Index .index 下記 Index パラメータで指定したインデックスの位置に挿入

位置 / 内容パラメータ ✏️

Index .index 🔢
AtIndex のときに挿入位置 (0 始まりのインデックス) を指定する整数パラメータ
– 末尾に追記したい場合は At 側を After Last に切替えるのが推奨 (公式: 末尾追加はこの方法を使う)

Contents .contents 🧾
– 挿入された行 / 列の各セルに書き込む値をスペース区切りで指定する文字列パラメータ
– スペースを含むセルはダブルクオートで囲む (例: Name Species "Home Planet" → 3 セル)
– パラメータ式でリストを返す書き方も可 (例: ['cell1', 'cell 2'])
– 与えた要素が挿入された行 / 列のセル数を超える場合、超過分は無視される

Include Names .includenames 🏷️
– On のとき、テーブルの行名 / 列名ヘッダも書き換え対象に含めて扱う
– 行・列ヘッダを意識した insert / replace を行いたい場面で有効化する

Replace if Duplicate Name .replaceduplicate 🔁
– On のとき、既存テーブルに同じ行名 / 列名がある場合は新規挿入ではなく既存セルを置き換える
– Off のとき、同名のまま新しい行 / 列を追加するため重複名が共存する

Replace (既存セルの一括書き換え) .replace 🔧

Replace .replace
– Replace ブロックを増減させるマルチブロックパラメータ (各ブロックが独立した置換ルールを持つ)
– 1 つの Insert DAT で複数の置換ルールを並べて適用したい場合にブロックを追加していく

Names .replace0names 🔎
– 各 Replace ブロック内で「どの行 / 列名を対象にするか」を決めるパターン文字列
– パターンマッチング (* 等のワイルドカード) で複数行 / 列を同時に対象にできる

Cell Expression .replace0expr 🧮
– 各セルに書き込む値を Python 式で指定するメニュー兼自由記述パラメータ
me.subRow / me.subCol で挿入対象セルのサブ行 / サブ列インデックスを参照可能
– 既定のプリセット例として以下のような式が選べます:

  • me.subRow
  • me.subCol
  • me.subCol * 100 + me.subRow
  • f'({me.subRow}, {me.subCol})'
  • op('tablename')[me.subRow, me.subCol]
  • op('chopname')[0][me.subRow]
  • op('chopname')[me.fillName][me.subRow]
  • op('sopname').points[me.subRow].P[0]
  • op('sopname').points[me.subRow].P[me.subCol]

Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: ヘッダー付きテーブルにログ行を末尾追記する 📝

Table DAT (ヘッダー行のみ) → Insert DAT (Insert=Row, At=After Last, Contents=タイムスタンプ+値) → 蓄積テーブル

Insert DAT の At=After Last モードを使うと、既存テーブルの末尾に新しい行を append していくログ蓄積パターンが 1 ノードで組めます。Contents に時刻と観測値をスペース区切りで与えるだけで、行単位の構造化ログが build できます。

  1. ヘッダー行だけを持つ Table DAT を用意 (例: timestamp value の 2 列)
  2. Insert DAT を接続し、InsertRowAtAfter Last に設定
  3. Contents パラメータに `absTime.seconds` me.par.value のような式 (もしくは外部から流し込む値) を指定
  4. イベント発火タイミングで Insert DAT がクックされる導線を組むと、末尾に行が追加されていく蓄積テーブルになる

Example 2: 既存テーブルに新しい列を後付けする (schema 拡張) ➕

Table DAT (既存スキーマ) → Insert DAT (Insert=Column, At=After Last, Contents=列の初期値) → 列が増えたテーブル

途中から新しいフィールドが必要になったテーブルに対し、Insert DAT を Column + After Last で繋ぐと既存行を全部維持したまま列だけ追加できます。Contents に列名と各行の初期値を順に並べて指定するだけで、別ノードを使わず schema 拡張が完結します。

  1. 既存テーブルを Insert DAT に入力
  2. InsertColumnAtAfter Last に設定
  3. Contents に列名と各行のデフォルト値をスペース区切りで列挙 (例: status active idle active)
  4. 出力テーブルを Examine DAT で確認し、列追加が反映されているかチェック

Example 3: Replaceで行名一致をPython式で書換 🔧

Table DAT → Insert DAT (Replace ブロック追加, Names=パターン, Cell Expression=Python 式) → 書き換え済テーブル

Insert DAT は Replace ブロックを追加することで、行名 / 列名のパターンマッチに対して Python 式で一括にセル値を書き換える「軽量な式エンジン」としても使えます。me.subRow / me.subCol でサブインデックスを参照しながら、外部 OP 由来の値を流し込むパターンが定番です。

  1. Insert DAT で Replace ボタンを押してブロックを 1 つ追加
  2. 追加されたブロックの Names に対象行名のパターン (例: player_*) を指定
  3. Cell Expression に Python 式を記述 (例: op('chop1')[0][me.subRow] で別 CHOP のチャンネル値を流し込み)
  4. 対象行名にマッチしたセルがすべて Python 式の評価結果で更新される (元の行 / 列構造は維持)

関連オペレータ 🔗

類似機能OP 🔍

  • Reorder DAT — 既存テーブルの行 / 列の並び順を変更する DAT (insert ではなく順序変更が責務)
  • Sort DAT — テーブルの行 / 列を指定列キーで並べ替える DAT
  • Transpose DAT — 行と列を入れ替えるテーブル変形 DAT (insert と組み合わせて行 ↔ 列に流用)
  • Substitute DAT — テーブルセル内の文字列パターンを正規表現で置換する DAT (Insert の Replace 機能と用途が重なる場面あり)
  • Merge DAT — 複数の DAT を結合する DAT (insert と違って既存テーブル拡張ではなく合成)

組み合わせ推奨OP 🔄

  • Table DAT — Insert の対象となるベーステーブルを保持する DAT (典型的な入力元)
  • Examine DAT — Insert 後のテーブル内容をリアルタイムで可視化してデバッグ
  • DAT Execute DAT — Insert によるテーブル変化 (行 / セル変更) を検知して Python コールバックを発火
  • Convert DAT — テキスト / CSV 入力をテーブル形式に変換してから Insert へ渡す前段処理
  • Switch DAT — 条件によって Insert する元テーブルを切替える上流スイッチ

前処理・後処理DAT 🎯


Info DAT情報 📊

Insert DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: Contents に書いた複数語のセルが意図しない位置で分割される
✅ Solution:

  • スペースを含むセルは必ずダブルクオートで囲む (例: Name Species "Home Planet")
  • リスト式での指定に切替える (例: パラメータ式に ['cell1', 'cell 2'] を渡す)
  • Contents の要素数が挿入された行 / 列のセル数を超えると超過分が無視される仕様なので、列幅と要素数を Examine DAT で照合

❌ Problem: 末尾に行 / 列を追加したいのに想定外の位置に挿入される
✅ Solution:

  • 末尾追加は Index ではなく At=After Last を使う (公式が明示している推奨方法)
  • Index 経由で末尾を指定すると行数増減のたびに値を更新する必要があり差分バグの温床になる
  • 先頭追加には逆に At=Before First を使い、Index モードは中間位置に挿入したい場合に限定する

❌ Problem: テーブル以外の DAT を入力しても期待通りに挿入できない
✅ Solution:

  • 公式仕様で「入力 DAT がテーブルでない場合は自動でテーブル化されてから挿入される」ため、まず Examine DAT で実際の行列構造を確認
  • 明示的にテーブル化したい場合は前段に Convert DAT を挟んで区切り文字を指定
  • Text DAT のように 1 セル扱いになるケースでは、入力側の改行 / セパレータが想定通りパースされているかを Examine DAT で検証

❌ Problem: Replace ブロックを追加しても置換が走らない / 一部だけ更新される
✅ Solution:

  • Names パラメータが対象行名 / 列名のパターンと一致しているか確認 (大文字小文字・ワイルドカード位置を含めて完全マッチを確認)
  • Include Names が Off のままで行名 / 列名ヘッダ自体を対象にしたい場合は On に切替える
  • Cell Expression 内で me.subRow / me.subCol を使う際は、サブインデックスがゼロ始まりであることを念頭に範囲を確認
  • 重複名がある場合は Replace if Duplicate Name の挙動 (置換 vs 重複作成) を Off / On で切替えて期待通りか比較する

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました