You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An RFC 4180 CSV parser library for hica. Parses comma-separated and delimiter-separated text into typed tables with named column access, filtering, aggregation, and round-trip serialization.
Custom delimiters: tab (TSV), semicolon, or any single-character separator
Header row: optional, has_header: true/false in CsvOptions
Round-trip: serialize a CsvTable back to CSV (or any other delimiter)
Quick start
import "./lib/csv/src/csv"
fun main(){let input = "name,age,city\nAlice,30,New York\nBob,25,London"let t = csv_parse(input)
println(csv_pretty(t))// name | age | city // ------+-----+---------// Alice | 30 | New York// Bob | 25 | London matchcsv_get_by_name(t,1,"city"){Some(v) => println(v),// LondonNone => println("not found")}}
API
Types
structCsvOptions{delimiter:string,// default ","has_header:bool,// default truequote_char:string// default "\""}structCsvTable{headers:list<string>,rows:list<list<string>>}
fun default_opts():CsvOptions
Parsing
Function
Signature
Purpose
csv_parse
(string) -> CsvTable
Parse with default options
csv_parse_opts
(string, CsvOptions) -> CsvTable
Parse with custom options
// Default (comma, header row, double-quote)let t = csv_parse(input)// Tab-separated, no headerlet opts = CsvOptions{delimiter:"\t",has_header:false,quote_char:"\""}let t = csv_parse_opts(input, opts)