
概要 📖 – ディスク上のテキスト / テーブルファイルを DAT に読み込む
File In DATは、ディスク上の .txt / .dat 等のテキスト・テーブルファイルを TouchDesigner の DAT として読み込む DATです。File パラメータで指定したパスの内容をそのまま保持し、Convert Text to Table をオンにするとタブ区切り文字でセルに分割されます。Refresh パルスでディスクからの再読み込みを任意のタイミングで起動できます。
主な用途 🎯
- CSV / TSV / プレーンテキストファイルをディスクから DAT に読み込み
- 外部スクリプト・設定ファイルを Python / GLSL ソースとして取り込み
- タブ区切りテーブルデータを Convert Text to Table で行列形式に展開
- ファイル更新の動的リロードを Refresh パルスで実行 (オーサリング中の hot-reload)
- 外部ツールが書き出したログ / 結果ファイルを TouchDesigner プロジェクトに取り込み
データフロー 🔄
ファイルシステム上のテキスト / テーブルファイル
↓File指定のパスを読み込み
↓Convert Text to Table設定に応じてプレーンテキストまたは行列テーブルとして展開
↓
下流 DAT へチェイン (Convert DAT / Evaluate DAT / DAT to CHOP 等)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
File In Page 📋
ファイルパス指定 📁
File .file 📄
– 読み込み対象ファイルのファイルシステム上のパスとファイル名
– .txt 等のテキストファイルは通常のテキストとして読み込み
– .dat 等のテーブル形式ファイルはタブ区切りテーブルとして読み込み可能
– 相対パスは .toe ファイルの位置を基点として解決される
形式変換設定 .converttable 🔁
Convert Text to Table .converttable 📊
– DAT の内容を通常のテキストから tab 区切りテーブル形式に変換するトグル
– On にすると <tab> 文字を列区切りとして解釈し、改行を行区切りとしてテーブルに展開
– Off ではプレーンテキスト 1 文字列として保持され、行 / 列のセル単位アクセスは不可
リロード制御 🔄
Refresh .refresh ♻️
– このパラメータが On に切り替わったタイミングでファイルを再読み込み
– トグル運用 (Off → On) で 1 回のリロードを起動する用途で使用
– 連続的にディスクを監視するわけではなく、明示的な状態変化が必要
Refresh Pulse .refreshpulse ⚡
– パルスでファイルをディスクから即座に再読み込み
– Python からは op('filein1').par.refreshpulse.pulse() で起動可能
– 外部エディタでファイルを編集した直後の hot-reload に最も便利
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 Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
Word Wrap .wordwrap 🔁
ノード表示でのワードラップ (折り返し) の有効化
| 項目 | 内部名 | 説明 |
|---|---|---|
| Input | .input |
入力 DAT の Word Wrap 設定を継承 |
| On | .on |
Word Wrap を有効化 (ノード上の長い行を折り返し表示) |
| Off | .off |
Word Wrap を無効化 (折り返さずそのまま表示) |
実践アイデア 💡
Example 1: CSV 設定ファイルの読み込み + Table DAT 連携 📊
ローカル CSV ファイル → File In DAT (Convert Text to Table=On) → Table DAT → DAT to CHOP
外部ツール (Excel / スプレッドシート / Python スクリプト) が書き出した CSV を File In DAT に読み込み、Convert Text to Table をオンにして行列テーブル化し、下流の Table DAT / DAT to CHOP で数値チャンネルに変換する基本フロー。設定ファイルを再生成するたびに Refresh Pulse でホットリロードできる。
- File In DAT を配置し
Fileに CSV ファイルへの絶対 / 相対パスを設定 Convert Text to Tableを On に切り替え、タブ区切りまたはカンマをConvert DAT経由でタブに変換- 下流に Table DAT を接続して列ヘッダー付きテーブルとして整形
- DAT to CHOP で必要な列を CHOP チャンネル化し制御パラメータへ供給
- CSV が更新されたら
Refresh Pulseを発火して即時反映
Example 2: GLSL/Pythonの外部編集ワークフロー 📝
外部エディタ (VSCode 等) → File In DAT (Refresh Pulse) → GLSL TOP / Execute DAT
シェーダ (.glsl) や Python スクリプト (.py) を VSCode 等の外部エディタで編集し、保存のたびに File In DAT から TouchDesigner 側に即時取り込む構成。Convert Text to Table は Off のままプレーンテキストとして保持し、下流の GLSL TOP / Execute DAT がソースコードとして利用する。
- File In DAT を配置し
Fileにshaders/main.glsl等のソースファイルパスを設定 Convert Text to Tableを Off に保ちプレーンテキストとして DAT に保持- 外部エディタでファイルを編集して保存
- TouchDesigner 側で
Refresh Pulseを発火 (または Execute DAT で startup 時に自動 pulse) - GLSL TOP / Execute DAT の参照先 DAT として File In DAT を指定し、最新ソースが下流に伝播
Example 3: ログ監視+Folder DATの組合せ 🪵
Folder DAT (ディレクトリ列挙) → Script DAT (最新ファイル選択) → File In DAT (Refresh Pulse) → Text TOP 表示
Folder DAT で監視対象ディレクトリを列挙し、Script DAT で最新タイムスタンプのログファイルを選択、そのパスを File In DAT の File パラメータに動的に書き込む構成。外部プロセスが書き出すログを TouchDesigner UI 上でほぼリアルタイムに確認できる。
- Folder DAT を配置し監視対象ディレクトリを
Folderパラメータに設定 - Script DAT で Folder DAT の行から最新のログファイル名を抽出
- Script DAT 内で
op('filein1').par.file = latest_pathとして File In DAT の File を更新 - Script DAT の callback 内で
op('filein1').par.refreshpulse.pulse()を呼び出して即時リロード - 下流に Text TOP を接続してログ内容を画面の隅にオーバーレイ表示
関連オペレータ 🔗
類似機能OP 🔍
- TODO
組み合わせ推奨OP 🔄
- Convert DAT — File In で読み込んだテキストの区切り文字変換や case 変換などの後処理
- Table DAT — Convert Text to Table 後の行列テーブルを整形 / 行追加して保持
- Evaluate DAT — 読み込んだセル値を式評価して動的に書き換え
- DAT to CHOP — テーブル化した数値列を CHOP チャンネルとして下流の制御系に流す
- Folder DAT — ディレクトリ列挙で得たファイル名を File In の
Fileパラメータに動的に流し込む - File Out DAT — File In と対をなす書き込み側 DAT、ラウンドトリップで永続化
- Execute DAT — startup / state change で File In に
Refresh Pulseを自動発火
前処理・後処理DAT 🎯
- 前処理: Folder DAT、File Out DAT、Web Client DAT、Script DAT
- 後処理: Convert DAT、Table DAT、Evaluate DAT、Select DAT
Info DAT情報 📊
File In DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time / cook_frame / warnings / errors 等の共通 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: ファイル内容が DAT に表示されない / 空のままになる
✅ Solution:
Fileパラメータのパスが正しく解決されているかを textport でop('filein1').par.file.eval()で確認- 相対パスを使う場合は
.toeの保存場所からの相対パスとして解釈されるため、未保存プロジェクトでは絶対パスを使用 Refresh Pulseを 1 回発火してディスクからの再読み込みを明示的にトリガー- 対象ファイルに OS / 別アプリの書き込みロックがかかっていないか確認
❌ Problem: CSV / タブ区切りファイルが 1 セルに固まる
✅ Solution:
Convert Text to Tableが On になっているかを確認- 区切り文字がカンマ (CSV) の場合は Convert DAT でカンマをタブに変換してから File In に通すか、File In 直下の Convert DAT で区切りを変換
- 改行コードが
CRLF/LF混在で行が崩れていないか元ファイルを確認
❌ Problem: ファイルを編集しても TouchDesigner 側に反映されない
✅ Solution:
- 外部エディタでの保存後に
Refresh Pulseを明示的に発火 - Execute DAT 等で定期的に自動
Refresh Pulseを発火する仕組みを追加 Refreshトグルを Off → On に切り替える運用に変えてリロードを起動- OS / アンチウイルスソフトがファイルアクセスをブロックしていないかを別アプリで開いて確認
❌ Problem: 大きなファイルでプロジェクトのクックが重くなる
✅ Solution:
- File In の出力を Select DAT で必要な行 / 列だけ抜き出して下流に流す
- 頻繁に
Refresh Pulseを発火しすぎていないか確認し、必要なタイミングのみに絞る - Info DAT で
cook_timeを観測し、ボトルネックが File In 自身か後段かを定量確認 - 巨大ファイルは事前に外部スクリプトで分割し、必要な部分だけを File In で読み込む構成に変更
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

