ajout des fonctions awk cqsql(), sval(), cval(). réorganiser et clarifier la doc

This commit is contained in:
Jephté Clain 2016-02-15 15:09:17 +04:00
parent f038fbde56
commit 1c397e8999
2 changed files with 60 additions and 23 deletions

View File

@ -53,10 +53,11 @@ qval(s)
--> 'here, \"there\" and '\\''everywhere'\\''.' --> 'here, \"there\" and '\\''everywhere'\\''.'
L'alias quote_value(s) existe pour compatibilité L'alias quote_value(s) existe pour compatibilité
qsval(s) sqval(s)
comme qval() mais ajouter un espace avant la valeur quotée. ceci permet de comme qval() mais ajouter un espace avant la valeur quotée. ceci permet de
construire facilement une ligne de commande, e.g.: construire facilement une ligne de commande, e.g.:
print \"mycmd\" qsval(arg1) qsval(arg2) print \"mycmd\" sqval(arg1) sqval(arg2)
L'alias qsval(s) existe pour compatibilité
qvals() qvals()
quoter les valeurs \$1..\$NF pour les passer comme argument sur la ligne de quoter les valeurs \$1..\$NF pour les passer comme argument sur la ligne de
@ -65,10 +66,11 @@ qvals()
La ligne qui est affichée pourra être évaluée avec eval dans le shell. La ligne qui est affichée pourra être évaluée avec eval dans le shell.
L'alias quoted_values(s) existe pour compatibilité L'alias quoted_values(s) existe pour compatibilité
qsvals(s) sqvals(s)
comme qvals() mais ajouter un espace avant la valeur quotée. ceci permet de comme qvals() mais ajouter un espace avant la valeur quotée. ceci permet de
construire facilement une ligne de commande, e.g.: construire facilement une ligne de commande, e.g.:
print \"mycmd\" qsvals() print \"mycmd\" sqvals()
L'alias qsvals(s) existe pour compatibilité
qsubrepl(s) qsubrepl(s)
quoter une valeur pour l'argument r des fonctions sub() et gsub(). Les quoter une valeur pour l'argument r des fonctions sub() et gsub(). Les
@ -87,10 +89,16 @@ qegrep(s)
qsql(s) qsql(s)
quoter une valeur pour un script sql. la valeur est entourée de quotes, e.g: quoter une valeur pour un script sql. la valeur est entourée de quotes, e.g:
quote_sql(\"hello'there\") qsql(\"hello'there\")
--> 'hello''there' --> 'hello''there'
L'alias quote_sql(s) existe pour compatibilité L'alias quote_sql(s) existe pour compatibilité
cqsql(s)
comme qsql() mais ajouter une virgule avant la valeur quotée. ceci permet de
construire facilement une requête SQL, e.g:
print \"insert into t(a, b, c) values (\" qsql(a) cqsql(b) cqsql(c) \");\"
--> insert into t(a, b, c) values ('a', 'b', 'c');
unquote_mysqlcsv(s) unquote_mysqlcsv(s)
Analyser une valeur exportée de MySQL avec mysqlcsv. Les transformations Analyser une valeur exportée de MySQL avec mysqlcsv. Les transformations
suivantes sont effectuées: suivantes sont effectuées:
@ -99,6 +107,16 @@ unquote_mysqlcsv(s)
\\0 --> <caractère NUL> \\0 --> <caractère NUL>
\\\\ --> \\ \\\\ --> \\
sval(s)
retourner la valeur s précédée d'un espace si elle est non vide, e.g:
sval(\"\") --> \"\"
sval(\"any\") --> \" any\"
cval(s)
retourner la valeur s précédée d'une virgule si elle est non vide, e.g:
sval(\"\") --> \"\"
sval(\"any\") --> \",any\"
mkindices(values, indices) mkindices(values, indices)
créer le tableau indices qui contient les indices du tableau values, de 1 à N, créer le tableau indices qui contient les indices du tableau values, de 1 à N,
et retourner la valeur N. Il faudra utiliser les valeurs de cette manière: et retourner la valeur N. Il faudra utiliser les valeurs de cette manière:
@ -115,6 +133,11 @@ array_new(dest)
array_newsize(dest, size) array_newsize(dest, size)
créer un nouveau tableau de taille size, rempli de chaines vides créer un nouveau tableau de taille size, rempli de chaines vides
array_len(src)
calculer la taille d'un tableau. length(array) a un bug sur GNUawk 3.1.5.
cette fonction est plus lente, mais fonctionne sur toutes les versions de
awk et GNUawk
array_copy(dest, src) array_copy(dest, src)
faire une copie d'un tableau. Cette fonction nécessite gnuawk, puisqu'elle faire une copie d'un tableau. Cette fonction nécessite gnuawk, puisqu'elle
utilise mkindices(). utilise mkindices().

View File

@ -1863,7 +1863,6 @@ function qhtml(s) {
gsub(/</, "\\&lt;", s) gsub(/</, "\\&lt;", s)
return s return s
} }
function quote_html(s) { return qhtml(s) }
function unquote_html(s) { function unquote_html(s) {
gsub(/&lt;/, "<", s) gsub(/&lt;/, "<", s)
gsub(/&gt;/, ">", s) gsub(/&gt;/, ">", s)
@ -1875,8 +1874,7 @@ function qval(s) {'"
gsub(/'/, \"'\\\\''\", s) gsub(/'/, \"'\\\\''\", s)
return \"'\" s \"'\" return \"'\" s \"'\"
"'} "'}
function quote_value(s) { return qval(s) } function sqval(s) {
function qsval(s) {
return " " qval(s) return " " qval(s)
} }
function qvals( i, line) { function qvals( i, line) {
@ -1887,36 +1885,33 @@ function qvals( i, line) {
} }
return line return line
} }
function quoted_values() { return qvals() } function sqvals() {
function qsvals() {
return " " qvals() return " " qvals()
} }
function qregexp(s) { function qregexp(s) {
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s) gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
return s return s
} }
function quote_regexp(s) { return qregexp(s) }
function qsubrepl(s) { function qsubrepl(s) {
gsub(/\\/, "\\\\", s) gsub(/\\/, "\\\\", s)
gsub(/&/, "\\\\&", s) gsub(/&/, "\\\\&", s)
return s return s
} }
function quote_subrepl(s) { return qsubrepl(s) }
function qgrep(s) { function qgrep(s) {
gsub(/[[\\.^$*]/, "\\\\&", s) gsub(/[[\\.^$*]/, "\\\\&", s)
return s return s
} }
function quote_grep(s) { return qgrep(s) }
function qegrep(s) { function qegrep(s) {
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s) gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
return s return s
} }
function quote_egrep(s) { return qegrep(s) }
function qsql(s) {'" function qsql(s) {'"
gsub(/'/, \"''\", s) gsub(/'/, \"''\", s)
return \"'\" s \"'\" return \"'\" s \"'\"
"'} "'}
function quote_sql(s) { return qsql(s) } function cqsql(s) {
return "," qsql(s)
}
function unquote_mysqlcsv(s) { function unquote_mysqlcsv(s) {
gsub(/\\n/, "\n", s) gsub(/\\n/, "\n", s)
gsub(/\\t/, "\t", s) gsub(/\\t/, "\t", s)
@ -1924,6 +1919,25 @@ function unquote_mysqlcsv(s) {
gsub(/\\\\/, "\\", s) gsub(/\\\\/, "\\", s)
return s return s
} }
function sval(s) {
if (s == "") return s
else return " " s
}
function cval(s) {
if (s == "") return s
else return "," s
}
# aliases pour compatibilité
function quote_html(s) { return qhtml(s) }
function quote_value(s) { return qval(s) }
function qsval(s) { return sqval(s) }
function quoted_values() { return qvals() }
function qsvals(s) { return sqvals(s) }
function quote_regexp(s) { return qregexp(s) }
function quote_subrepl(s) { return qsubrepl(s) }
function quote_grep(s) { return qgrep(s) }
function quote_egrep(s) { return qegrep(s) }
function quote_sql(s) { return qsql(s) }
function __parse_date_fr(date, parts, y, m, d) { function __parse_date_fr(date, parts, y, m, d) {
if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/, parts)) { if (match(date, /([0-9][0-9]?)\/([0-9][0-9]?)\/([0-9][0-9][0-9][0-9])/, parts)) {
@ -1970,6 +1984,14 @@ function date_add(date, nbdays, serial) {
return strftime("%d/%m/%Y", serial) return strftime("%d/%m/%Y", serial)
} }
function mkindices(values, indices, i, j) {
array_new(indices)
j = 1
for (i in values) {
indices[j++] = int(i)
}
return asort(indices)
}
function array_new(dest) { function array_new(dest) {
dest[0] = 0 # forcer awk à considérer dest comme un tableau dest[0] = 0 # forcer awk à considérer dest comme un tableau
delete dest delete dest
@ -1991,14 +2013,6 @@ function array_len(values, count, i) {
} }
return count return count
} }
function mkindices(values, indices, i, j) {
array_new(indices)
j = 1
for (i in values) {
indices[j++] = int(i)
}
return asort(indices)
}
function array_copy(dest, src, count, indices, i) { function array_copy(dest, src, count, indices, i) {
array_new(dest) array_new(dest)
count = mkindices(src, indices) count = mkindices(src, indices)