EEZ Studio CSVParse: Align Row Selection and Structure Field Order with the File
A CSV import can parse without an error and still assign each value to the wrong named field. In an EEZ Studio Dashboard, inspect the CSVParse structure field order before blaming the delimiter or adding a header-renaming workaround.
The CSVParse guide defines the selected record range and result configuration. The pinned csv.ts implementation shows how the action constructs its parser options. This analysis uses EEZ Studio v0.29.0 editor commit 3000161d09d40a5c1dc2477ddc30b38037b3a612 and the Dashboard CSVParse action.
Two decisions deserve separate attention: which records are selected, and which declared field receives each column. A header row does not answer both questions automatically.
Structure fields supply the column mapping
For a structured array result, the implementation obtains the element type and builds the columns list from that type's fields, in their declared order. It passes that explicit list to the parser. This is not a header-discovery step that searches the input for matching names.
Imagine a file whose records contain station, channel and note, in that order. The intended structure should map those positions to the corresponding fields. If a copied structure instead orders channel before station, the parser can be given a different positional mapping even though the visible header looks correct.
Use all-string diagnostic fields at first, with unmistakable values such as station-alpha, channel-bravo and note-charlie. That keeps type conversion from hiding the basic mapping problem. Once the positional relationship is correct, test the actual product types and their conversions separately.

From and To are one-based record selections
The documentation defines From as the first record to process and To as the last, with counting starting at one. A value of one identifies the first record, not the second.
Decide whether the input includes a header as part of the file format contract. If it does, explicitly establish how that record is excluded or otherwise handled. Do not assume that supplying a structure type makes the action recognize the header and consume it as metadata.
A small fixture should make off-by-one mistakes visible. Use one header and three data records with different identifiers. Compare the configured first and last selected records against their expected identifiers. A large production file whose first several rows look similar is a poor first diagnostic.
Record selection should also be described as records, not casually as physical text lines. CSV data can contain quoting and delimiter rules that make a line-oriented mental model unreliable. Exercise the file conventions the application actually accepts, rather than creating a second ad hoc parser upstream.
The delimiter does not validate the schema
The action evaluates a delimiter expression and passes it into the parser. Choosing the correct delimiter is necessary, but it does not establish that the file's columns have the right business meaning.
For example, two exports can both contain three comma-separated fields while placing station and channel in opposite positions. Both may be syntactically plausible. The import contract needs a version or a reliable external identification rule if those formats coexist; a successful parser call cannot decide which layout the sender intended.
After mapping, validate required fields and domain constraints before the data becomes a device command or persistent configuration. This is an application stage, not a claim that CSVParse implements arbitrary field-level schema validation. Keep unknown file formats distinguishable from malformed CSV so a diagnostic does not encourage the operator to retry the wrong export repeatedly.
Consume the parsed result at the result boundary
There is one timing detail worth checking while wiring the importer. The inspected implementation calls the parser with a callback. The callback emits result on success, while the ordinary seqout call is outside that callback, after parsing has been initiated.
Consequently, do not use the presence of that source-level seqout call as proof that a consumer has already received the parsed array. Wire the data-dependent step around the actual result and the installed Flow semantics. The article's main issue is column mapping, but a correct mapping is useless if a consumer reads an earlier array before the new result arrives.
Observe the result contents directly during the fixture. A log that only says “import started” or “sequence continued” does not establish which records and fields were produced.
Accept the import with a deliberately asymmetric sample
A useful acceptance sample contains a header, clearly different values in each column, distinct row identifiers, an empty optional field and the quoting cases allowed by the file contract. Test the documented From and To selections, then deliberately reverse two structure fields in a disposable copy to ensure the diagnostic can detect the error.
No CSVParse execution was performed here. The result to seek is not merely an error-free import. It is an array whose selected record identities and named field values agree with the declared file layout. That is the boundary the pinned action's explicit columns construction makes necessary.