parse(text: string) - > Result<Array<Array<string>>, string>- Module
- std.
csv - Receiver
- Not applicable
- Minimum arity
- 1
- Maximum arity
- 1
Declaration and parameters
LinkAvailability
Included by default: Pending
Import std.csv in language mode 5.21.
The current compiler selects std/csv.tpz for this language mode. Availability in other released editions and inclusion in each installed distribution are Pending.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1769 - compiler/crates/topaz_resolve/src/stdlib.rs at
b48527d0a174· 69 - compiler/crates/topaz_resolve/src/stdlib.rs at
b48527d0a174· 430 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1769 - compiler/crates/topaz_self_frontend/topaz/checker/builtin_signatures.tpz at
b48527d0a174· 197 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1973 - compiler/crates/topaz_self_frontend/topaz/checker/call_facts.tpz at
b48527d0a174· 978 - compiler/crates/topaz_self_frontend/topaz/checker/members_capabilities.tpz at
b48527d0a174· 1250
Receiver
Parameter constraints
parseWithHeader returns Result<Array<Map<string, string>>, string>. A repeated header name returns Err instead of choosing a first or last column.
Header uniqueness is checked before converting data rows. Repeated names are rejected when cell values are equal and when the input contains a header without data rows.
The header names are the parsed CSV field values. Equality uses those string values without an additional trimming or case-folding step.
Use csv.parse when columns must remain positional. Positional parsing preserves every field and does not assign header names.
Related rule: Require unique headers for named CSV rowsResult
The declared result type is Result<Array<Array<string>>, string>.
Effects
Failures
Result and effects
LinkParses CSV text into positional string rows.
Related entries
LinkRequire unique headers for named CSV rows
LinkRequire unique headers for named CSV rows
parseWithHeader returns Result<Array<Map<string, string>>, string>. A repeated header name returns Err instead of choosing a first or last column.
Header uniqueness is checked before converting data rows. Repeated names are rejected when cell values are equal and when the input contains a header without data rows.
The header names are the parsed CSV field values. Equality uses those string values without an additional trimming or case-folding step.
Use csv.parse when columns must remain positional. Positional parsing preserves every field and does not assign header names.
Why
A named row gives each name one column. Rejecting duplicates keeps column order from selecting a winner, while positional parsing retains data that has no unique names.
Source evidence
- compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 830 - compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 841 - compiler/crates/topaz_value/src/value/collections.rs at
271329b482bc· 386 -
topaz.stdlib.contract.csv-unique-headersatworking-tree - topaz.decision.csv-unique-headers.1 at
topaz.decisi
Read unique named columns
Linkimport std.csvimport std.testimport std.iolet rows = test.assertOk(csv.parseWithHeader("name,count\nTopaz,6"))let row = test.assertSome(rows.get(0))io.writeLine(test.assertSome(row.get("name")))io.writeLine(test.assertSome(row.get("count")))
Topaz 6
Expected result
Expected result
Execution completes. Exit code 0.
Topaz6
Source evidence
- compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 830 - compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 841 - compiler/crates/topaz_value/src/value/collections.rs at
271329b482bc· 386 -
topaz.stdlib.contract.csv-unique-headersatworking-tree - topaz.decision.csv-unique-headers.1 at
topaz.decisi
Reject duplicate names
Linkimport std.csvimport std.iomatch (csv.parseWithHeader("name,name\nleft,right")) {case Err(_) => io.writeLine("duplicate headers rejected")case Ok(_) => io.writeLine("accepted")}
duplicate headers rejected
Expected result
Expected result
Execution completes. Exit code 0.
duplicate headers rejected
The parser rejects this input by returning Err. The program handles that result and exits successfully.
Source evidence
- compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 830 - compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 841 - compiler/crates/topaz_value/src/value/collections.rs at
271329b482bc· 386 -
topaz.stdlib.contract.csv-unique-headersatworking-tree - topaz.decision.csv-unique-headers.1 at
topaz.decisi
Reject duplicate names after reversing values
Linkimport std.csvimport std.iomatch (csv.parseWithHeader("name,name\nright,left")) {case Err(_) => io.writeLine("duplicate headers rejected")case Ok(_) => io.writeLine("accepted")}
duplicate headers rejected
Expected result
Expected result
Execution completes. Exit code 0.
duplicate headers rejected
The parser rejects this input by returning Err. The program handles that result and exits successfully.
Source evidence
- compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 830 - compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 841 - compiler/crates/topaz_value/src/value/collections.rs at
271329b482bc· 386 -
topaz.stdlib.contract.csv-unique-headersatworking-tree - topaz.decision.csv-unique-headers.1 at
topaz.decisi
Reject duplicate names even when the values agree
Linkimport std.csvimport std.iomatch (csv.parseWithHeader("name,name\nsame,same")) {case Err(_) => io.writeLine("duplicate headers rejected")case Ok(_) => io.writeLine("accepted")}
duplicate headers rejected
Expected result
Expected result
Execution completes. Exit code 0.
duplicate headers rejected
The parser rejects this input by returning Err. The program handles that result and exits successfully.
Source evidence
- compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 830 - compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 841 - compiler/crates/topaz_value/src/value/collections.rs at
271329b482bc· 386 -
topaz.stdlib.contract.csv-unique-headersatworking-tree - topaz.decision.csv-unique-headers.1 at
topaz.decisi
Reject duplicate names before reading data rows
Linkimport std.csvimport std.iomatch (csv.parseWithHeader("name,name")) {case Err(_) => io.writeLine("duplicate headers rejected")case Ok(_) => io.writeLine("accepted")}
duplicate headers rejected
Expected result
Expected result
Execution completes. Exit code 0.
duplicate headers rejected
The parser rejects this input by returning Err. The program handles that result and exits successfully.
Source evidence
- compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 830 - compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 841 - compiler/crates/topaz_value/src/value/collections.rs at
271329b482bc· 386 -
topaz.stdlib.contract.csv-unique-headersatworking-tree - topaz.decision.csv-unique-headers.1 at
topaz.decisi
Preserve repeated header text in positional rows
Linkimport std.csvimport std.testimport std.iolet rows = test.assertOk(csv.parse("name,name\nleft,right"))let row = test.assertSome(rows.get(1))io.writeLine("{row[0]}:{row[1]}")
left:right
Expected result
Expected result
Execution completes. Exit code 0.
left:right
Source evidence
- compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 830 - compiler/crates/topaz_value/src/value/builtins/path_regex_url.rs at
271329b482bc· 841 - compiler/crates/topaz_value/src/value/collections.rs at
271329b482bc· 386 -
topaz.stdlib.contract.csv-unique-headersatworking-tree - topaz.decision.csv-unique-headers.1 at
topaz.decisi