From e2bee01af84bc7a6bc191f931f195b3c0b5175cc Mon Sep 17 00:00:00 2001 From: Julian Hurst Date: Fri, 15 Nov 2024 01:14:07 +0100 Subject: Add csv command --- csv/csv.ha | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 csv/csv.ha (limited to 'csv/csv.ha') 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)?; + }; +}; -- cgit v1.2.3