From 189c3af4052d543ce816637d97fed926fefa5c47 Mon Sep 17 00:00:00 2001 From: Julian Hurst Date: Fri, 15 Nov 2024 01:14:07 +0100 Subject: csv -> tsv --- cmd.ha | 16 ++++++++-------- csv/csv.ha | 30 ------------------------------ hatask.ha | 4 ++-- tsv/tsv.ha | 22 ++++++++++++++++++++++ 4 files changed, 32 insertions(+), 40 deletions(-) delete mode 100644 csv/csv.ha create mode 100644 tsv/tsv.ha diff --git a/cmd.ha b/cmd.ha index 6924fa9..3335209 100644 --- a/cmd.ha +++ b/cmd.ha @@ -7,7 +7,7 @@ use path; use os::exec; use strconv; use ascii; -use csv; +use tsv; type error = !(!str | io::error | path::error | exec::error | strconv::error); @@ -40,8 +40,8 @@ const commands: [_]command = [ func = &do, }, command { - names = ["c", "csv"], - func = &csv, + names = ["t", "tsv"], + func = &tsv, }, ]; @@ -83,11 +83,11 @@ fn show(tasks: []task, a: arguments) (void | task | error) = { fmt::println(t.content)!; }; -fn printtaskcsv(t: task, id: size) (void | error) = { +fn printtasktsv(t: task, id: size) (void | error) = { const sid = strings::dup(strconv::ztos(id)); defer free(sid); const spriority = strconv::ztos(t.priority); - csv::writerecord(os::stdout, [sid, t.name, spriority])!; + tsv::writerecord(os::stdout, [sid, t.name, spriority])!; }; fn printtask(t: task, id: size) (void | error) = { @@ -155,11 +155,11 @@ fn filter(tasks: []task, a: arguments) (void | task | error) = { }; }; -fn csv(tasks: []task, a: arguments) (void | task | error) = { - csv::writerecord(os::stdout, ["id" ,"name", "priority"])!; +fn tsv(tasks: []task, a: arguments) (void | task | error) = { + tsv::writerecord(os::stdout, ["id" ,"name", "priority"])!; for (let i = 0z; i < len(tasks); i += 1) { const t = tasks[i]; - printtaskcsv(t, i)?; + printtasktsv(t, i)?; }; }; diff --git a/csv/csv.ha b/csv/csv.ha deleted file mode 100644 index 40e1e3b..0000000 --- a/csv/csv.ha +++ /dev/null @@ -1,30 +0,0 @@ -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)?; - }; -}; diff --git a/hatask.ha b/hatask.ha index 190f82b..c65aff2 100644 --- a/hatask.ha +++ b/hatask.ha @@ -130,8 +130,8 @@ export fn main() void = { ("w", ["write a task", "id"]: []getopt::help), ("done", ["delete a task", "id"]: []getopt::help), ("d", ["delete a task", "id"]: []getopt::help), - ("csv", ["print csv of tasks"]: []getopt::help), - ("c", ["print csv of tasks"]: []getopt::help), + ("tsv", ["print tsv of tasks"]: []getopt::help), + ("t", ["print tsv of tasks"]: []getopt::help), ); defer getopt::finish(&cmd); diff --git a/tsv/tsv.ha b/tsv/tsv.ha new file mode 100644 index 0000000..85015a1 --- /dev/null +++ b/tsv/tsv.ha @@ -0,0 +1,22 @@ +use io; +use strings; +use fmt; + +export type error = !(str | io::error); + +export fn writerecord(w: io::handle, record: []str) (void | error) = { + let sep = ""; + for (const field .. record) { + const pfield = strings::replace(field, "\t", ""); + defer free(pfield); + fmt::fprintf(w, "{}{}", sep, pfield)!; + sep = "\t"; + }; + fmt::fprintln(w)!; +}; + +export fn writerecords(w: io::handle, records: [][]str) (void | error) = { + for (const record .. records) { + writerecord(w, record)?; + }; +}; -- cgit v1.2.3