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'\\''.'
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
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()
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.
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
construire facilement une ligne de commande, e.g.:
print \"mycmd\" qsvals()
print \"mycmd\" sqvals()
L'alias qsvals(s) existe pour compatibilité
qsubrepl(s)
quoter une valeur pour l'argument r des fonctions sub() et gsub(). Les
@ -87,10 +89,16 @@ qegrep(s)
qsql(s)
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'
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)
Analyser une valeur exportée de MySQL avec mysqlcsv. Les transformations
suivantes sont effectuées:
@ -99,6 +107,16 @@ unquote_mysqlcsv(s)
\\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)
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:
@ -115,6 +133,11 @@ array_new(dest)
array_newsize(dest, size)
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)
faire une copie d'un tableau. Cette fonction nécessite gnuawk, puisqu'elle
utilise mkindices().

View File

@ -1863,7 +1863,6 @@ function qhtml(s) {
gsub(/</, "\\&lt;", s)
return s
}
function quote_html(s) { return qhtml(s) }
function unquote_html(s) {
gsub(/&lt;/, "<", s)
gsub(/&gt;/, ">", s)
@ -1875,8 +1874,7 @@ function qval(s) {'"
gsub(/'/, \"'\\\\''\", s)
return \"'\" s \"'\"
"'}
function quote_value(s) { return qval(s) }
function qsval(s) {
function sqval(s) {
return " " qval(s)
}
function qvals( i, line) {
@ -1887,36 +1885,33 @@ function qvals( i, line) {
}
return line
}
function quoted_values() { return qvals() }
function qsvals() {
function sqvals() {
return " " qvals()
}
function qregexp(s) {
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
return s
}
function quote_regexp(s) { return qregexp(s) }
function qsubrepl(s) {
gsub(/\\/, "\\\\", s)
gsub(/&/, "\\\\&", s)
return s
}
function quote_subrepl(s) { return qsubrepl(s) }
function qgrep(s) {
gsub(/[[\\.^$*]/, "\\\\&", s)
return s
}
function quote_grep(s) { return qgrep(s) }
function qegrep(s) {
gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
return s
}
function quote_egrep(s) { return qegrep(s) }
function qsql(s) {'"
gsub(/'/, \"''\", s)
return \"'\" s \"'\"
"'}
function quote_sql(s) { return qsql(s) }
function cqsql(s) {
return "," qsql(s)
}
function unquote_mysqlcsv(s) {
gsub(/\\n/, "\n", s)
gsub(/\\t/, "\t", s)
@ -1924,6 +1919,25 @@ function unquote_mysqlcsv(s) {
gsub(/\\\\/, "\\", 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) {
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)
}
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) {
dest[0] = 0 # forcer awk à considérer dest comme un tableau
delete dest
@ -1991,14 +2013,6 @@ function array_len(values, count, i) {
}
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) {
array_new(dest)
count = mkindices(src, indices)