
概要 📖 – DAT の内容をディスク上のテキスト / テーブルファイルに書き出す
File Out DATは、入力 DAT の内容をディスク上の任意パスのテキストファイルに書き出す DATです。File パラメータで指定したファイルパスに、Write File パルスを発火したタイミングで内容を 1 回書き出します。Append をオンにすると上書きせず末尾追記、N + me.par.n 変数を併用するとファイル名を連番で増分させながら出力できます。
主な用途 🎯
- テーブル DAT を CSV / TSV / プレーンテキストとしてディスクに永続化
- ログファイルへの追記出力を Append モードで実現 (時系列イベントの追記保存)
- 連番ファイル出力を
Nパラメータ +me.par.n変数で実装 (フレーム / 試行ごとの結果保存) - 外部ツール連携用の中間ファイル生成 (Python / シェルスクリプト / 別アプリへの引き渡し)
- パイプラインのチェックポイント保存を任意タイミングで Write パルスから起動
データフロー 🔄
上流 DAT (Table DAT / Convert DAT / Script DAT 等)
↓
File Out DAT の入力に接続
↓Fileに指定したパスへ書き込み (Appendオフで上書き / オンで末尾追記)
↓Write Fileパルス発火で 1 回ディスクへ書き出し
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
File Out Page 📋
出力先ファイル指定 📁
File .file 📄
– 書き出し先ファイルのファイルシステム上のパスとファイル名
– 相対パスは .toe ファイルの位置を基点として解決される
– ファイル名内で $N (Tscript) または me.par.n (Python expression) を参照すると、N パラメータの値が展開されて連番ファイル名になる
– 拡張子は任意 (.txt / .csv / .dat / .log 等)、下流ツールが期待する拡張子に合わせる
連番カウンタ .n 🔢
N .n 🔢
– File パラメータ内で me.par.n (または Tscript の $N) として参照される整数値
– 1 ファイル書き出すごとに手動でインクリメントする運用が基本
– 自動インクリメントには Count CHOP 等を Export してこのパラメータに流し込む
– output_${me.par.n:04d}.txt のような expression で 4 桁ゼロ埋めの連番ファイル名を生成可能
書き込み起動 .write ✍️
Write File .write ⚡
– このパルスを発火したタイミングで File パスへ 1 回書き出しを実行
– Python からは op('fileout1').par.write.pulse() で起動可能
– 連続的にディスクへ書き続けるわけではなく、明示的にパルスを発火した瞬間のみ I/O が走る
– 上流 DAT が更新されただけでは自動書き出しは起こらないため、書き出しタイミングは設計者が明示制御する
追記モード .append 📝
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
書き出しのたびに既存ファイル内容を破棄し、現在の入力 DAT 内容で完全に上書き |
| On | .on |
既存ファイル末尾に現在の入力 DAT 内容を追記 (テキスト出力時のみ有効、テーブル形式では構造が崩れるため非推奨) |
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: Table DAT を CSV / TSV としてディスクに保存 📊
Table DAT → File Out DAT (Append=Off) → Write File パルス → ローカル CSV ファイル
TouchDesigner 上で組み立てたテーブル (実験結果 / プリセット / メタデータ等) を、外部ツールやスプレッドシートで開ける CSV / TSV ファイルとしてディスクに永続化する基本フロー。Append をオフに保ち、保存ボタン UI から Write File パルスを発火する構成にすると、常に最新の入力 DAT 内容で上書き保存される。
- 上流に Table DAT を配置して保存したい表データを準備
- File Out DAT を接続し
Fileに出力先パス (例:exports/result.tsv) を設定 Append (txt Only)をOffに保ち、毎回完全上書きする運用にする- Button COMP の callback 内で
op('fileout1').par.write.pulse()を呼び出して書き出しを起動 - 保存後に外部スプレッドシート / Python で当該ファイルを開いて内容を検証
Example 2: ログファイルへのイベント追記出力 🪵
Script DAT (ログ行整形) → File Out DAT (Append=On) → Execute DAT の callback で Write File pulse → 永続ログファイル
センサーイベント / ユーザ操作 / エラーメッセージなどの時系列イベントを 1 行ずつログファイルに追記していくパターン。Append (txt Only) を On にし、Execute DAT 等の callback でイベント発火のたびに Write File パルスを呼び出すと、ファイルが上書きされず末尾に新行が積み上がる。
- Script DAT 内で 1 行分のログ文字列 (
timestamp\tlevel\tmessage等) を整形して自身の出力に書き込み - File Out DAT を Script DAT の下流に接続し
Fileにlogs/session.log等のパスを設定 Append (txt Only)をOnに切り替え、書き出しごとに末尾追記する運用に変更- Execute DAT (もしくは別の callback) 内で
op('fileout1').par.write.pulse()を発火 - 外部ツール (tail -f / VSCode 等) でログファイルを開きリアルタイム監視する
Example 3: 連番ファイル名でのスナップショット保存 🔢
Count CHOP → File Out DAT の N パラメータに Export → File 内で me.par.n を展開 → snapshot_0001.txt / snapshot_0002.txt …
実験試行ごと / フレームごとに結果 DAT をディスクに連番ファイルで残したい用途のパターン。N パラメータに Count CHOP の出力を Export し、File パラメータの expression 内で me.par.n を参照すると、書き出しのたびにファイル名の連番部分が自動で増分する。
- Count CHOP を配置し、書き出しトリガー (Pulse / イベント) を入力としてカウントを増分する設定にする
- Count CHOP の出力を File Out DAT の
Nパラメータに Export して連動させる Fileパラメータに expression'snapshots/snap_{:04d}.txt'.format(int(me.par.n))等を設定し、4 桁ゼロ埋めの連番ファイル名を生成Append (txt Only)はOffのままにし、各ファイルは独立した上書き保存とする- イベントごとに
op('fileout1').par.write.pulse()を呼び出し、snap_0001.txt/snap_0002.txt… が順に生成される
関連オペレータ 🔗
類似機能OP 🔍
- TODO
組み合わせ推奨OP 🔄
- File In DAT — File Out と対をなす読み込み側 DAT、ラウンドトリップでファイル経由の永続化と再読込が成立
- Table DAT — 出力対象テーブルの組み立て / 整形を担当する典型的な上流 DAT
- Convert DAT — 保存前に区切り文字 (タブ → カンマ等) を変換して CSV / TSV 互換ファイルとして書き出し
- Script DAT — ログ行の整形やヘッダー付加など書き出し直前の Python 加工を担当
- Execute DAT — イベント / ステート変化の callback 内で
par.write.pulse()を自動発火 - Count CHOP —
Nパラメータへ Export して連番ファイル名のカウンタを駆動 - Folder DAT — 出力先ディレクトリの既存ファイル一覧を確認し、上書き / 連番化の判断材料に利用
前処理・後処理DAT 🎯
Info DAT情報 📊
File Out 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: Write File パルスを発火してもファイルが生成されない
✅ Solution:
Fileパラメータのパスが正しく解決されているかを textport でop('fileout1').par.file.eval()で確認- 相対パスを使う場合は
.toeの保存場所からの相対パスとして解釈されるため、未保存プロジェクトでは絶対パスを使用 - 出力先ディレクトリが実在し、TouchDesigner プロセスに書き込み権限があるかを OS 側で確認
- アンチウイルス / OS のファイルアクセス制御が当該パスをブロックしていないか別アプリで確認
❌ Problem: Append オンにしたのに毎回ファイルが上書きされてしまう
✅ Solution:
Append (txt Only)がOnになっているかを再確認 (バイナリ / テーブル形式の入力では追記が無視される場合がある)- 入力 DAT がプレーンテキスト 1 行のみになっているかを確認 (テーブル DAT を append すると行の構造が崩れるため非推奨)
- ログ用途では Script DAT 側で 1 行ずつ整形してから File Out に渡し、
Append=Onと組み合わせる構成にする
❌ Problem: 連番ファイル名が増えず常に同じファイルに上書きされる
✅ Solution:
Nパラメータの値が書き出しごとに増分しているかを Info DAT または textport で観測Fileパラメータの expression がme.par.nを参照しているか確認 (literal 文字列に$Nと書いても展開されないケースあり、Python expression mode に切り替えが必要)- Count CHOP を
Nに Export している場合、Count CHOP の Reset 設定で意図せず 0 に戻っていないかを確認
❌ Problem: 大きなテーブルを書き出すとフレームレートが落ちる
✅ Solution:
Write Fileを毎フレーム発火していないかを確認し、必要なタイミングのみパルスする運用に変更- 事前に Select DAT で必要な行 / 列だけ抜き出してから File Out に流し、書き出しデータ量自体を削減
- Info DAT で
cook_timeを観測し、ボトルネックが File Out 自身か上流 DAT の cook かを定量確認 - 巨大ファイルは外部スクリプトに Python で分割書き込みさせる構成に切替え、TouchDesigner 側は最小限のデータのみ保存する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

