implémenter printcsv

This commit is contained in:
Jephte CLAIN 2016-02-29 23:55:54 +04:00
parent 383410a451
commit af183325fe
2 changed files with 69 additions and 4 deletions

View File

@ -72,7 +72,7 @@ sqvals(s)
print \"mycmd\" sqvals()
L'alias qsvals(s) existe pour compatibilité
qarr(vs, prefix)
qarr(vs[, prefix])
quoter les valeurs du tableau vs pour le shell, e.g:
print \"values=(\" qarr(values) \")\"
si prefix est spécifié, il est affiché suivi d'un espace, suivi des valeurs
@ -1786,7 +1786,6 @@ Afficher les champs spécifiés pour traitement par le shell
Le nom du tableau est fixé à 'values'. L'option -n permet de spécifier le
nom de la fonction, qui vaut 'dump' par défaut"
: "${__DUMPCSV_DEBUG:=}"
function ldumpcsv() {
eval "$(utools_local)"
local skip= parse_headers=1
@ -1836,3 +1835,58 @@ function ldumpcsv() {
function cdumpcsv() { LANG=C ldumpcsv "$@"; }
function dumpcsv() { LANG=C ldumpcsv "$@"; }
################################################################################
__PRINTCSV_HELP="\
Afficher les valeurs spécifiées au format CSV
-F, --fields FIELDS
Spécifier les champs en sortie
-o, --output OUTPUT
Ajouter la ligne au fichier spécifié. Si le fichier n'existe pas ou est de
taille vide, et que l'option -F est spécifiée, alors écrire les en-têtes
dans le fichier avant d'écrire les valeurs.
--show-headers
-n, --no-headers
Forcer l'affichage (resp. le non-affichage) des en-têtes"
function lprintcsv() {
eval "$(utools_local)"
local fields output show_headers=auto
parse_opts "${PRETTYOPTS[@]}" \
-F:,--fields: fields= \
-o:,--output: output= \
-n,--no-headers show_headers= \
--show-headers show_headers=1 \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
array_split fields "$fields" ,
[ "$output" == - ] && output=
[ -n "$fields" ] || show_headers=
if [ "$show_headers" == auto ]; then
if [ -n "$output" ]; then
[ -s "$output" ] || show_headers=1
else
show_headers=
fi
fi
[ -n "$output" ] || output=/dev/stdout
values=("$@")
awkrun -f >>"$output" fields[@] show_headers:int="$show_headers" values[@] '
BEGIN {
if (show_headers) array_printcsv(fields)
if (fields_count > 0) count = fields_count
else count = values_count
array_new(output)
for (i = 1; i <= count; i++) {
if (i <= values_count) output[i] = values[i]
else output[i] = ""
}
array_printcsv(output)
}'
}
function cprintcsv() { LANG=C lprintcsv "$@"; }
function printcsv() { LANG=C lprintcsv "$@"; }

15
uawk
View File

@ -1,7 +1,7 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
TOOLS=(awkrun awkcsv grepcsv awkfsv2csv mergecsv sortcsv dumpcsv)
TOOLS=(awkrun awkcsv grepcsv awkfsv2csv mergecsv sortcsv dumpcsv printcsv)
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
# créer les liens
scriptname="$(basename "$0")"
@ -123,7 +123,7 @@ $__SORTCSV_HELP"
"${prefix}sortcsv" "$@"
elif [ "$tool" == "dumpcsv" ]; then
[ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: afficher les champs d'un fichiers CSV pour traitement par le shell
[ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: afficher les champs d'un flux CSV pour traitement par le shell
${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C
}
USAGE
@ -133,6 +133,17 @@ $__DUMPCSV_HELP"
"${prefix}dumpcsv" "$@"
elif [ "$tool" == "printcsv" ]; then
[ $# -eq 1 -a "$1" == --help ] && exit_with uecho "$scriptname: afficher des champs au format CSV
${Clang:+note: ce script ne tient pas compte de la locale: il travaille avec LANG=C
}
USAGE
$scriptname [options] values...
$__PRINTCSV_HELP"
"${prefix}printcsv" "$@"
elif [ -n "$scriptname" ]; then
die "$scriptname: nom d'outil invalide"