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

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

File Out DAT のファイル書き出し機能を示す図

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

概要 📖 – 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 回ディスクへ書き出し

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 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 を CSV / TSV としてディスクに保存 📊

Table DAT → File Out DAT (Append=Off) → Write File パルス → ローカル CSV ファイル

TouchDesigner 上で組み立てたテーブル (実験結果 / プリセット / メタデータ等) を、外部ツールやスプレッドシートで開ける CSV / TSV ファイルとしてディスクに永続化する基本フロー。Append をオフに保ち、保存ボタン UI から Write File パルスを発火する構成にすると、常に最新の入力 DAT 内容で上書き保存される。

  1. 上流に Table DAT を配置して保存したい表データを準備
  2. File Out DAT を接続し File に出力先パス (例: exports/result.tsv) を設定
  3. Append (txt Only)Off に保ち、毎回完全上書きする運用にする
  4. Button COMP の callback 内で op('fileout1').par.write.pulse() を呼び出して書き出しを起動
  5. 保存後に外部スプレッドシート / 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 パルスを呼び出すと、ファイルが上書きされず末尾に新行が積み上がる。

  1. Script DAT 内で 1 行分のログ文字列 (timestamp\tlevel\tmessage 等) を整形して自身の出力に書き込み
  2. File Out DAT を Script DAT の下流に接続し Filelogs/session.log 等のパスを設定
  3. Append (txt Only)On に切り替え、書き出しごとに末尾追記する運用に変更
  4. Execute DAT (もしくは別の callback) 内で op('fileout1').par.write.pulse() を発火
  5. 外部ツール (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 を参照すると、書き出しのたびにファイル名の連番部分が自動で増分する。

  1. Count CHOP を配置し、書き出しトリガー (Pulse / イベント) を入力としてカウントを増分する設定にする
  2. Count CHOP の出力を File Out DAT の N パラメータに Export して連動させる
  3. File パラメータに expression 'snapshots/snap_{:04d}.txt'.format(int(me.par.n)) 等を設定し、4 桁ゼロ埋めの連番ファイル名を生成
  4. Append (txt Only)Off のままにし、各ファイルは独立した上書き保存とする
  5. イベントごとに 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 CHOPN パラメータへ 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 側は最小限のデータのみ保存する

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました