diff options
Diffstat (limited to 'csv/csv.ha')
| -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)?; + }; +}; |
