diff options
| author | Julian Hurst <ark@mansus.space> | 2024-11-15 01:14:07 +0100 |
|---|---|---|
| committer | Julian Hurst <ark@mansus.space> | 2024-11-15 01:14:07 +0100 |
| commit | e2bee01af84bc7a6bc191f931f195b3c0b5175cc (patch) | |
| tree | 9adf909a75fb57132fa650991f7ffd8b6cb2613f /csv | |
| parent | e2b4bcd44149125b5e2a53579e1340ec10bc8eb3 (diff) | |
| download | hatask-e2bee01af84bc7a6bc191f931f195b3c0b5175cc.tar.gz | |
Add csv command
Diffstat (limited to 'csv')
| -rw-r--r-- | csv/csv.ha | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/csv/csv.ha b/csv/csv.ha new file mode 100644 index 0000000..40e1e3b --- /dev/null +++ b/csv/csv.ha @@ -0,0 +1,30 @@ +use io; +use strings; +use fmt; + +export type error = !(str | io::error); + +export fn writerecord(w: io::handle, record: []str, separator: const str = ",", quote: const rune = + '"') (void | error) = { + let sep = ""; + for (const field .. record) { + if (strings::contains(field, separator)) { + if (strings::contains(field, quote)) { + return "ERROR: Field contains quote character + (not supported)"; + }; + fmt::fprintf(w, "{}{}{}{}", sep, quote, field, quote)!; + } else { + fmt::fprintf(w, "{}{}", sep, field)!; + }; + sep = separator; + }; + fmt::fprintln(w)!; +}; + +export fn writerecords(w: io::handle, records: [][]str, separator: const str = ",", quote: const + rune = '"') (void | error) = { + for (const record .. records) { + writerecord(w, record, separator, quote)?; + }; +}; |
