1.036 2025-02-04 Released-By: PERLANCAR; Urgency: medium - Add options: --input-skip-num-lines, --input-skip-until-pattern. [cli csv-concat] - [doc][internal] Add more code comments on how csv_concat works. 1.035 2025-01-14 Released-By: PERLANCAR; Urgency: medium - [cli csv-concat] Add --overlay mode & --overwrite-fields option. 1.034 2024-02-02 Released-By: PERLANCAR; Urgency: medium - [ux] (Re)add csv2csv as alias for csv-csv. 1.033 2023-09-06 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-sort-fields-by-spec. 1.032 2023-09-05 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-sort-fields-by-example. 1.031 2023-08-06 Released-By: PERLANCAR; Urgency: medium - [cli csv2vcf] [ux] Detect Indonesian words 'nama' and 'telepon'/'telefon' in column names. - [doc] Grammar/wording. 1.030 2023-07-25 Released-By: PERLANCAR; Urgency: medium - [cli csv-freqtable] Add option --with-data-rows. 1.029 2023-07-21 Released-By: PERLANCAR; Urgency: low - No functional changes. - [doc] [cli csv-fill-cells] Tweak example. 1.028 2023-07-21 Released-By: PERLANCAR; Urgency: low - No functional changes. - [ux] Indicate alias utilities with "(shorter name for ...)" in Abstract. - [doc] [ux] [cli csv-fill-cells] Add illustration to show how different layouts fill cells differently. - [doc] [cli csv-sorted-rows] Add description to --quiet. 1.027 2023-06-19 Released-By: PERLANCAR; Urgency: medium - [bugfix][cli csv-fill-cells] Forgot to update schema in function metadata. 1.026 2023-06-19 Released-By: PERLANCAR; Urgency: medium - [cli csv-fill-cells] Add tests, fix bug, implement 'layout' option. 1.025 2023-06-18 Released-By: PERLANCAR; Urgency: medium - Add utilities: csv-pick-cells, csv-fill-cells. - [doc] Forgot to list {input,ouput}_{fields,fields_idx} in documentation on stash keys. 1.024 2023-04-01 Released-By: PERLANCAR; Urgency: low - [cli list-csvutils] [doc] Add examples, tweak Perinci::CmdLine attributes. 1.023 2023-03-31 Released-By: PERLANCAR; Urgency: medium - Add (meta-)utility: list-csvutils. - [ux] Add tags to each utility; rename csv-munge-row to csv-munge-rows. 1.022 2023-03-10 Released-By: PERLANCAR; Urgency: medium - Add utilities: csv-quote, csv-unquote. - [ux][cli csv-sort-rows][cli csv-find-value][cli csv-get-cells][cli csv-uniq] Fields can be referred by name or by index (1-based). - [ux][cli csv-sort-rows][cli csv-sorted-rows] Give default for --by-field if there is only a single field. 1.021 2023-03-02 Released-By: PERLANCAR; Urgency: medium - [cli csv-cmp] Allow excluding/selecting fields to compare. - [cli csv-cmp] Add examples. 1.020 2023-03-02 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-cmp. 1.019 2023-03-01 Released-By: PERLANCAR; Urgency: medium - Add utilities: csv-trim, csv-ltrim, csv-rtrim. 1.018 2023-02-18 Released-By: PERLANCAR - Fix documentation on csv2paras. 1.017 2023-02-18 Released-By: PERLANCAR; Urgency: medium - [bugfix] Forgot to generate CLIs: csv2paras, paras2csv. 1.016 2023-02-18 Released-By: PERLANCAR; Urgency: low - No functional changes. - [build] Rebuild with fixed DZP:InsertExecsList to fix generated POD. 1.015 2023-02-18 Released-By: PERLANCAR; Urgency: medium - Add utilities: csv2paras, paras2csv. - [cli csv-freqtable] Add options --ignore-case (-i) and --key (-k). 1.014 2023-02-16 Released-By: PERLANCAR; Urgency: low - No functional changes. - [doc] Fix terminology column -> field in description & error message. - [doc][bugfix] Fix typo in example of csv-intrange. - [doc] Add some description to gen_csv_util(). 1.013 2023-02-15 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-check-rows. - [cli csv-check-field-names] Check that number of fields >= 1. 1.012 2023-02-15 Released-By: PERLANCAR; Urgency: medium - [incompatible change] Rename utilities for clarity: csv-check-cell -> csv-check-cell-values, csv-check-fields -> csv-check-field-values; Remove csv-check-values. - Add utility: csv-check-field-names. - Handle sparse fields that caused perl warning 'splice() offset past end of array' (RT#146473). - [bugfix] Fix completion for filenames (file_ext_filter is applied to extension and not filename). - [bugfix] In inplace mode, do not rename unwritten output files (RT#146453, https://rt.cpan.org/Transaction/Display.html?id=2442471). - Update error message (field option -F is now -f). 1.011 2023-02-14 Released-By: PERLANCAR; Urgency: medium - [bugfix] -b was not added. 1.010 2023-02-14 Released-By: PERLANCAR; Urgency: medium - Add inplace mode (--inplace, --inplace-backup-ext). Forbid input and output as the same unless user specifies inplace mode. Ref: RT#146453. 1.009 2023-02-10 Released-By: PERLANCAR; Urgency: medium - Add options: --output-always-quote, --output-quote-empty. - [doc] Add an example of using --output-always-quote in Manual/Cookbook.pod 1.008 2023-02-03 Released-By: PERLANCAR; Urgency: low - No functional changes. - Fix description/example in csv-check-cell. 1.007 2023-02-03 Released-By: PERLANCAR; Urgency: medium - [ux] Add csv-check-values as alias for csv-check-cell. - [cli csv-check-cell] Add option --with-regex. 1.006 2023-02-03 Released-By: PERLANCAR; Urgency: medium - Add utilties: csv-check-field, csv-check-cell. 1.005 2023-02-02 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-sorted-fields. - [test] Add tests for csv-sorted-{rows,fields}. 1.004 2023-02-01 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-sorted-rows. - Fix tab completion message (-f is now not the option for input_filename). 1.003 2023-01-11 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-find-values. 1.002 2023-01-04 Released-By: PERLANCAR; Urgency: medium - [cli csv-intrange] Add option --sort. - Fix Abstract of csv-uniq. 1.001 2023-01-04 Released-By: PERLANCAR; Urgency: medium - Add utilities: csv-intrange, csv-uniq. 1.000 2022-12-29 Released-By: PERLANCAR; Urgency: medium - No functional changes since 0.999_2. - Documentation tweaks. 0.999_2 2022-12-23 Released-By: PERLANCAR; Backward-Incompatible: yes [Incompatible changes] - [internal] Remove wants_repeat_* flow control because it is inherently broken. Utilities that want to read files out of order or repeat reading, like csv-concat, can construct the loop manually. Now, csv-concat can work with non-seekable input files like process substitution (e.g.: `csv-concat <(...) <(...)`). [Documentation] - Add entries to cookbook. 0.999_1 2022-12-21 Released-By: PERLANCAR; Backward-Incompatible: yes [Incompatible changes] - Rename variable given to eval codes '$main::field_idxs' to '$main::fields_idx'. - [cli csv-sort-fields] --by-code code now receives [$field_name, $field_idx] instead of just $field_name. - [cli csv-select-rows] row number spec now means *data row* number spec, e.g. 1 means the first *data* row. - [cli csv-select-rows] Will not output header row if there is no rows matching spec. - [cli csv-setop] Will not output header row if there is no result data rows. - [cli csv-convert-to-hash] Row number now means *data* row number, e.g. 1 means the first row number. [New features] - Add utility: csv-gen. [Internals] - Make API modular. It is now possible and easier to create a new utility without modifying the "core" routine. No more "core" routine. [Enhancements] - [cli csv-select-fields] Add option --show-selected-fields, like in csv-delete-fields. [Removed] - Remove alias CLI's: csv2csv (only csv-csv now provided), dump-csv (only csv-dump now provided). - Reading from & writing to URL feature is removed to remove dependency to LWP::UserAgent. One can use piping to/from clipget/clipadd to read from/write to clipboard. There are other tools for reading/writing to URL addresses. [Documentation & UX] - Add example(s) to all utilities. - Add -a as shortcut for --include-all-fields, -A for --exclude-all-fields. 0.054 2022-12-14 Released-By: PERLANCAR; Urgency: medium - [cli csv-concat] Prevent warning & segfault because of extra fields in data rows (RT#145466). - [bugfix] [cli csv-info] Fix row counts. - [ux] Enable logging in CLIs. 0.053 2022-12-09 Released-By: PERLANCAR; Urgency: medium - [bugfix] [cli csv-select-rows] Fix function metadata (multiple args with pos=1). - [bugfix] [cli csv-fill-template] Fix function metadata (multiple args with pos=1). - [bugfix] [cli csv-concat] Fix function metadata (clashing argument positions --filename & --output-filename) (RT#145467). 0.052 2022-12-05 Released-By: PERLANCAR; Urgency: medium - [bugfix][clis csv-sort-rows, csv-sort-fields, csv-concat] Didn't observe -O and/or -o (RT#145283). 0.051 2022-12-02 Released-By: PERLANCAR; Urgency: medium; Backward-Incompatible: yes [Incompatible changes] - Rename csv-select-row to csv-select-rows for consistency. - [cli csv-sort-fields] Rename by_example to by_examples argument and make it an array, on CLI specify one example at a time with --by-example, to allow header name that contains comma. [Enhancements] - Add utilities csv-pick-rows, csv-pick-fields, csv-shuf-rows, csv-shuf-fields. - [cli csv-sort-fields] Add options --by-code, --by-sortsub. 0.050 2022-12-02 Released-By: PERLANCAR; Urgency: low - No functional changes. - [build] Rebuild to work around bug in my toolchain that still uses the old module to generate POD. 0.049 2022-12-02 Released-By: PERLANCAR; Urgency: low - No functional changes. - [cli csv-sort-rows] Update documentation (no more --by-fields). 0.048 2022-12-02 Released-By: PERLANCAR; Urgency: medium; Backward-Incompatible: yes [Incompatible changes] - [cli csv-sort-rows] Make by_fields argument an array and specify on CLI one field at a time with --by-field to allow header name which contains comma (RT#145282). [Enhancements] - Improve --by-field tab completion (provide +FIELD, -FIELD, ~FIELD). 0.047 2022-12-01 Released-By: PERLANCAR; Urgency: medium - [cli csv-add-field] Rename to csv-add-fields, now can add multiple fields, -e is now optional, also add -H (RT#145276, RT#145268). - [bugfix] [cli csv-sort, csv-sort-rows] output_filename was not passed to csvutil() (RT#145267). - [bugfix] [cli csv-setop] Fix argument parsing (output_filename clashes with filename) (RT#145275). - [doc] Tweak Abtract for csv-setop to make it a bit more discoverable. 0.046 2022-10-25 Released-By: PERLANCAR; Urgency: medium - Add utility: csv2vcf. 0.045 2022-10-09 Released-By: PERLANCAR; Urgency: medium - Add option --output-filename (-o) and --overwrite (-O); allow reading/writing to URL in addition to file. 0.044 2022-08-09 Released-By: PERLANCAR; Urgency: high - Merge releases 0.041 & 0.041.2. 0.041.2 2022-08-08 Released-By: PERLANCAR; Urgency: medium - Add utilities: csv-fill-template, csv-get-cells. - [cli cli-munge-row] Avoid warning when perl code adds a new field. - UPDATE 2022-08-09: rename release from 0.041 to 0.041.2 due to conflict. 0.043 2022-08-01 Released-By: PERLANCAR; Urgency: low - No functional changes. - Tweak POD formatting. 0.042 2022-08-01 Released-By: PERLANCAR; Urgency: low - No functional changes. - [doc] Add some examples to App::CSVUtils::Manual::Cookbook. 0.041 2022-08-01 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-get-cells. - [cli cli-munge-row] Avoid warning when perl code adds a new field. 0.040 2022-08-01 Released-By: PERLANCAR; Urgency: medium; Backward-Incompatible: yes [Incompatible changes] - Rename csv-delete-field to csv-delete-fields to reflect the fact that it can now select multiple fields. - Short option -f now becomes shortcut for --include-field (a.k.a. --field) instead of for --filename. [clis csv-delete-fields, csv-select-fields] - Improve field selection ability by adding --exclude-field (-F), --exclude-field-pat to exclude fields. We know have four options to select fields: --include-field (--field, -f), --include-field-pat, --exclude-field (-F), and --exclude-field-pat. In addition to that, we also have --include-all-fields and --exclude-all-fields as alias for --include-field-pat .* and --exclude-field-pat .*, respectively. - Add option --ignore-unknown-fields to ignore unknown field specified via --include-field (--field, -f) or --exclude-field (-F). - Add option --show-selected-fields to show selected fields and immediately exit. 0.039 2022-07-27 Released-By: PERLANCAR; Urgency: low - No functional changes. - [doc] Mention more CSV-related modules. 0.038 2022-07-25 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-munge-row. 0.037 2022-03-27 Released-By: PERLANCAR; Urgency: medium - Set input and output encoding to UTF8 and note this in the scripts' documentation (RT#141357). 0.036 2022-02-10 Released-By: PERLANCAR; Urgency: medium - [cli csv-freqtable] [bugfix] Extraneous first row was produced. 0.035 2022-02-10 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-freqtable. 0.034 2021-07-10 Released-By: PERLANCAR; Urgency: medium - [bugfix][doc] Cookbook package was not renamed. 0.033 2021-07-10 Released-By: PERLANCAR; Urgency: medium - Add logging. - [build] Rebuild with newer Perinci::CmdLine::POD 0.023 to generate POD-formatted usage line. 0.032 2020-08-16 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-transpose. - Add cookbook (mostly only placeholders for now). 0.031 2020-08-03 Released-By: PERLANCAR; Urgency: medium - Add CLI: csv-csv (csv2csv). - Add CSV output options --output-{sep,quote,escape}-char for CLIs that output CSV, e.g. csv-sort, csv-grep, csv-sum, csv-split, csv-csv, etc. [cli csv-info] - [ux] Now defaults to producing naked result (RT#133078). 0.030 2020-07-30 Released-By: PERLANCAR; Urgency: medium - Add common options: --sep-char, --quote-char, --escape-char (RT#133079). [cli csv-info] - [bugfix] Avoid dying on invalid CSV by initializing $fields to [] (RT#133077). [cli csv-setop] - [bugfix][doc] Fix the documentation of --compare-fields (RT#133076). 0.029 2020-05-29 Released-By: PERLANCAR; Urgency: medium - Add utility: csv2td. 0.028 2019-12-27 Released-By: PERLANCAR; Urgency: medium [cli csv-sort-rows] - Add options --key (-k), --by-sortsub. 0.027 2019-12-23 Released-By: PERLANCAR; Urgency: medium - Tweak tab completion. 0.026 2019-12-19 Released-By: PERLANCAR; Urgency: medium - Add ability to read CSV from stdin. - [bugfix] csv-sort-rows, csv-sort-fields: didn't observe common options --tsv and --no-header. 0.025 2019-11-29 Released-By: PERLANCAR; Urgency: medium - Update coerce rule names in Sah schemas (Data::Sah::Coerce 0.034+). 0.024 2019-11-14 Released-By: PERLANCAR; Urgency: medium - Add utility: csv-split. 0.023 2019-06-06 Released-By: PERLANCAR - Add utiity: csv-info. - [doc] Explain --no-header more. 0.022 2019-05-21 Released-By: PERLANCAR - Add csv2ltsv script (ltsv2csv not yet). - [doc] Mention App::TSVUtils and App::LTSVUtils; update that csv2tsv, tsv2csv are now included by us. 0.021 2019-05-12 Released-By: PERLANCAR - Add scripts: csv2tsv, tsv2csv. 0.020 2019-04-29 Released-By: PERLANCAR - Add utilities: csv-setop, csv-sort-rows (with alias csv-sort), csv-lookup-fields. - Make $main::csv available to Perl code. - [bugfix] A couple of fixes. 0.019 2019-04-23 Released-By: PERLANCAR - Declare argument specification variables with 'our' instead of 'my' so they are accessible from outside. 0.018 2019-04-23 Released-By: PERLANCAR - Add option --tsv to parse input file as TSV instead of CSV. 0.017 2019-04-23 Released-By: PERLANCAR - csvutil(): forgot to update valid actions in schema. 0.016 2019-04-23 Released-By: PERLANCAR - Add utility: csv-dump (and its alias dump-csv). 0.015 2019-04-15 Released-By: PERLANCAR - Add utility: csv-each-row. - Make $main::field_idxs also available for Perl code. - [ux] CLIs do not need to read env or config. - Allow 'eval' argument to be coderef, for when csvutil() is called from Perl. 0.014 2018-05-25 Released-By: PERLANCAR - Add utility: csv-map. - [ux] (for csv-grep, csv-map): Compile --eval code in 'main' package, turn off strict & warnings. - csv-grep & csv-map: also set $main::row and $main::rownum like in other utilities. - [test] Add test for csv-grep (& csv-map). 0.013 2017-07-02 Released-By: PERLANCAR - Add utility: csv-grep. - Add common option: --(no-)header to be able to handle CSV that does not have header row. 0.012 2017-04-25 Released-By: PERLANCAR - csv-select-fields: Add --field-pat to select by regular expression. 0.011 2016-11-17 Released-By: PERLANCAR - [Bugfix] csv-select-fields CLI was not generated in previous release. 0.010 2016-11-16 Released-By: PERLANCAR - Add utility: csv-select-fields. - csv-delete-field: allow deleting multiple fields in one go. 0.009 2016-11-16 Released-By: PERLANCAR - Add utility: csv-concat. - csv-add-field: add option --after, --before, --at to specify position of the new field. 0.008 2016-11-16 Released-By: PERLANCAR - Add utilities: csv-select-row, csv-convert-to-hash. 0.007 2016-11-15 Released-By: PERLANCAR - Add utilities: csv-sum, csv-avg. - csv-add-field: Tweak completion: field should not be completed with existing field names. 0.006 2016-11-03 Released-By: PERLANCAR - [ux] Add completion for field name (-F) and --example. 0.005 2016-11-03 Released-By: PERLANCAR - csv-add-field, csv-munge-field: Don't run code for header row. - Tweak descriptions. 0.004 2016-11-03 Released-By: PERLANCAR - [Removed] Remove utility csvutil. - Add utility csv-sort-fields. 0.003 2016-11-02 Released-By: PERLANCAR - [Incompatible change] Rename script replace-newline-in-csv to csv-replace-newline for consistency with the other utilities. - Add tests. 0.002 2016-11-02 Released-By: PERLANCAR - Add utilities: csvutil, csv-list-field-names, csv-add-field, csv-delete-field, csv-munge-field. 0.001 2016-11-01 Released-By: PERLANCAR - First release.