diff --git a/lib/ulib/awk b/lib/ulib/awk index 8235306..bb9f317 100644 --- a/lib/ulib/awk +++ b/lib/ulib/awk @@ -1795,10 +1795,15 @@ Afficher les champs spécifiés pour traitement par le shell est 'dumph' -a, --array Afficher les champs comme les valeurs d'un tableau, e.g: + values=() values=(value00 value01...) values=(value10 value11...) L'option -n permet de spécifier le nom du tableau, qui vaut 'values' par défaut. Avec -h, le nom par défaut est 'names' + Cette méthode commence par afficher de quoi initialiser le tableau à une + valeur vide. Ainsi, si aucune ligne n'est trouvée, le tableau est néanmoins + initialisé. Si ce comportement n'est pas désiré, il est possible d'utiliser + l'option --no-empty -b, --array-function Afficher les champs comme l'initialisation des valeurs d'un tableau suivi de l'appel d'une fonction, e.g: @@ -1813,7 +1818,7 @@ Afficher les champs spécifiés pour traitement par le shell function ldumpcsv() { eval "$(utools_local)" local skip= parse_headers=1 keepf skipf show_headers - local dump=function name hname + local dump=function empty=1 name hname parse_opts "${PRETTYOPTS[@]}" \ -S:,--skip:,--skip-lines:,--skiplines: skip= \ -H,--parse-headers parse_headers=1 \ @@ -1825,6 +1830,8 @@ function ldumpcsv() { --hname: hname= \ -f,--function dump=function \ -a,--array dump=array \ + --empty empty=1 \ + --no-empty empty= \ -b,--array-function dump=array-function \ @ args -- "$@" && set -- "${args[@]}" || die "$args" @@ -1853,7 +1860,22 @@ function ldumpcsv() { local -a fields fields=("$@") - awkcsv "${args[@]}" -v show_headers:int="$show_headers" -v hname="$hname" -v name="$name" -v dump="$dump" -v fields[@] -e ' + awkcsv "${args[@]}" -v show_headers:int="$show_headers" -v hname="$hname" -v name="$name" -v dump="$dump" -v empty_array:int="$empty" -v fields[@] -e ' +function init_fields() { + if (do_once("init_fields")) { + if (fields_count == 0) { + array_copy(fields, HEADERS) + fields_count = array_len(fields) + } + if (show_headers) { + dump_values(hname, fields) + } + if (dump == "array" && empty_array) { + array_new(empty) + dump_values(name, empty) + } + } +} function dump_values(name, values) { if (dump == "function") { print qarr(values, name) @@ -1865,15 +1887,7 @@ function dump_values(name, values) { } } { - if (do_once("init_fields")) { - if (fields_count == 0) { - array_copy(fields, HEADERS) - fields_count = array_len(fields) - } - if (show_headers) { - dump_values(hname, fields) - } - } + init_fields() array_new(values) i = 1 while (i <= fields_count) { @@ -1881,6 +1895,9 @@ function dump_values(name, values) { i++ } dump_values(name, values) +} +END { + init_fields() }' -a '' }