File Export

Shipping
file_export

Write the incoming value (Signal/Bundle/DataFrame/Matrix) to a CSV/TSV/TXT file

Signature

Inputs

  • inputAnyThe value to serialize. Any CaptyseValue — Signal, SignalBundle, DataFrame, Matrix, and so on. Unwired = clean no-op.

Parameters

KeyTypeDefaultNotes
file_pathpathDestination file (save picker, extensions csv/tsv/txt/dat). Format is taken from the extension when Format = Auto.
formatenumautoone of: auto, csv, tsv, txt
auto_exportboolfalseWrite the file automatically on every run. Off = use the Export Now button in the inspector.
delimiterenumcommaone of: comma, semicolon, tab, space, pipe
include_headerbooltrueWrite the column-name row (with 'name [unit]' for united columns).
include_indexboolfalsePrepend a 0-based row-index column.
decimal_sepenum.one of: ., ,
precisionint-1Decimal places for floats (-1 = full / shortest round-trip).
line_endingenumlfone of: lf, crlf
null_tokentextText written for a missing/null cell (empty by default).
append_modeboolfalseAppend to the file instead of overwriting it.

Description

File Export is a sink node: one optional input port, no outputs. It serializes any incoming CaptyseValue — Signal, SignalBundle, DataFrame, Matrix, and so on — to delimited text (CSV / TSV / TXT) through the Rust io layer. Column headers are written as name [unit] for united columns, so a round trip through File Import recovers the physical units.

Writing is deliberately gated. auto_export defaults to off, so a normal (or live 20 Hz) run never touches the disk on every tick; the on-demand path is the inspector's Export Now button. When auto_export is on, the file is written each run — an empty file_path in that case is a hard error so a misconfiguration is visible, while an unwired input is a clean no-op (the run isn't aborted).

Formatting is fully controllable: delimiter, include_header, include_index, decimal_sep, precision, line_ending, null_token, and append_mode. precision uses the convention that any negative value (including the -1 default) means full / shortest round-trip precision, while a value fixes the number of decimals. append_mode writes to the end of an existing file rather than overwriting, which — combined with a live run — turns the node into a rolling logger.

File Export is stateless: it holds no memory across evaluations. Its only side effect is the file it writes; it alters nothing in the graph's numerical result.

Examples

Export a signal on demand

Wire a processed Signal into input, set file_path = out.csv, leave auto_export = false. Nothing is written during runs; clicking Export Now in the inspector writes a two-column CSV time,value (value header carrying the signal's unit, e.g. value [V]).

Fixed-precision European CSV

Set decimal_sep = ,, delimiter = ;, precision = 3. A value of is written as 1,235 in a semicolon-separated file — the standard shape many European spreadsheet tools expect.

Rolling log via append

Turn on auto_export and append_mode, turn off include_header. Each run appends the current input's rows to the file, accumulating a growing log across a live capture session rather than overwriting.

Applications

  • Saving processed signals, spectra, or tables to CSV/TSV for use in external tools (spreadsheets, MATLAB, Python).
  • Producing locale-correct exports with comma decimals and semicolon delimiters for European workflows.
  • Appending live results to a rolling log file during a capture session for later offline analysis.
  • Archiving a DataFrame or Matrix with fixed decimal precision for reproducible, diff-friendly artifacts.

Neat

Auto-export is off by default so the disk is never hammered on a live tick; the normal path is the inspector's Export Now button, keeping runs pure.

The `input` port accepts literally any CaptyseValue — the same node serializes a Matrix, a SignalBundle, or a DataFrame with no configuration change.

Precision uses a signed convention: -1 (default) means shortest round-trip that reparses to the exact same float, so exports are lossless unless you deliberately fix the decimals.

Column headers are written as 'name [unit]', mirroring File Import's parser, so an export/import pair round-trips physical units losslessly.

Known issues

With `auto_export` off, the node writes nothing during runs — a common surprise; use Export Now or enable auto-export to actually produce a file.

`auto_export` on with an empty File Path is a hard error, whereas an unwired input is a silent no-op — two different empty conditions with different behavior.

`append_mode` does not deduplicate or re-check the header, so appending frames with mismatched columns can produce a ragged file.

See also

sinkexportcsvfileioserialization