158 lines
3.8 KiB
Plaintext
158 lines
3.8 KiB
Plaintext
|
# -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||
|
|
||
|
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
|
||
|
}
|
||
|
function array_newsize(dest, size, i) {
|
||
|
dest[0] = 0 # forcer awk à considérer dest comme un tableau
|
||
|
delete dest
|
||
|
size = int(size)
|
||
|
for (i = 1; i <= size; i++) {
|
||
|
dest[i] = ""
|
||
|
}
|
||
|
}
|
||
|
function array_len(values, count, i) {
|
||
|
# length(array) a un bug sur awk 3.1.5
|
||
|
# cette version est plus lente mais fonctionne toujours
|
||
|
count = 0
|
||
|
for (i in values) {
|
||
|
count++
|
||
|
}
|
||
|
return count
|
||
|
}
|
||
|
function array_copy(dest, src, count, indices, i) {
|
||
|
array_new(dest)
|
||
|
count = mkindices(src, indices)
|
||
|
for (i = 1; i <= count; i++) {
|
||
|
dest[indices[i]] = src[indices[i]]
|
||
|
}
|
||
|
}
|
||
|
function array_getlastindex(src, count, indices) {
|
||
|
count = mkindices(src, indices)
|
||
|
if (count == 0) return 0
|
||
|
return indices[count]
|
||
|
}
|
||
|
function array_add(dest, value, lastindex) {
|
||
|
lastindex = array_getlastindex(dest)
|
||
|
dest[lastindex + 1] = value
|
||
|
}
|
||
|
function array_deli(dest, i, l) {
|
||
|
i = int(i)
|
||
|
if (i == 0) return
|
||
|
l = array_len(dest)
|
||
|
while (i < l) {
|
||
|
dest[i] = dest[i + 1]
|
||
|
i++
|
||
|
}
|
||
|
delete dest[l]
|
||
|
}
|
||
|
function array_del(dest, value, ignoreCase, i) {
|
||
|
do {
|
||
|
i = key_index(value, dest, ignoreCase)
|
||
|
if (i != 0) array_deli(dest, i)
|
||
|
} while (i != 0)
|
||
|
}
|
||
|
function array_extend(dest, src, count, lastindex, indices, i) {
|
||
|
lastindex = array_getlastindex(dest)
|
||
|
count = mkindices(src, indices)
|
||
|
for (i = 1; i <= count; i++) {
|
||
|
dest[lastindex + i] = src[indices[i]]
|
||
|
}
|
||
|
}
|
||
|
function array_fill(dest, i) {
|
||
|
array_new(dest)
|
||
|
for (i = 1; i <= NF; i++) {
|
||
|
dest[i] = $i
|
||
|
}
|
||
|
}
|
||
|
function array_getline(src, count, indices, i, j) {
|
||
|
$0 = ""
|
||
|
count = mkindices(src, indices)
|
||
|
for (i = 1; i <= count; i++) {
|
||
|
j = indices[i]
|
||
|
$j = src[j]
|
||
|
}
|
||
|
}
|
||
|
function array_appendline(src, count, indices, i, nf, j) {
|
||
|
count = mkindices(src, indices)
|
||
|
nf = NF
|
||
|
for (i = 1; i <= count; i++) {
|
||
|
j = nf + indices[i]
|
||
|
$j = src[indices[i]]
|
||
|
}
|
||
|
}
|
||
|
function in_array(value, values, ignoreCase, i) {
|
||
|
if (ignoreCase) {
|
||
|
value = tolower(value)
|
||
|
for (i in values) {
|
||
|
if (tolower(values[i]) == value) return 1
|
||
|
}
|
||
|
} else {
|
||
|
for (i in values) {
|
||
|
if (values[i] == value) return 1
|
||
|
}
|
||
|
}
|
||
|
return 0
|
||
|
}
|
||
|
function key_index(value, values, ignoreCase, i) {
|
||
|
if (ignoreCase) {
|
||
|
value = tolower(value)
|
||
|
for (i in values) {
|
||
|
if (tolower(values[i]) == value) return int(i)
|
||
|
}
|
||
|
} else {
|
||
|
for (i in values) {
|
||
|
if (values[i] == value) return int(i)
|
||
|
}
|
||
|
}
|
||
|
return 0
|
||
|
}
|
||
|
function array2s(values, prefix, sep, suffix, noindices, first, i, s) {
|
||
|
if (!prefix) prefix = "["
|
||
|
if (!sep) sep = ", "
|
||
|
if (!suffix) suffix = "]"
|
||
|
s = prefix
|
||
|
first = 1
|
||
|
for (i in values) {
|
||
|
if (first) first = 0
|
||
|
else s = s sep
|
||
|
if (!noindices) s = s "[" i "]="
|
||
|
s = s values[i]
|
||
|
}
|
||
|
s = s suffix
|
||
|
return s
|
||
|
}
|
||
|
function array2so(values, prefix, sep, suffix, noindices, count, indices, i, s) {
|
||
|
if (!prefix) prefix = "["
|
||
|
if (!sep) sep = ", "
|
||
|
if (!suffix) suffix = "]"
|
||
|
s = prefix
|
||
|
count = mkindices(values, indices)
|
||
|
for (i = 1; i <= count; i++) {
|
||
|
if (i > 1) s = s sep
|
||
|
if (!noindices) s = s "[" indices[i] "]="
|
||
|
s = s values[indices[i]]
|
||
|
}
|
||
|
s = s suffix
|
||
|
return s
|
||
|
}
|
||
|
function array_join(values, sep, prefix, suffix, count, indices, i, s) {
|
||
|
s = prefix
|
||
|
count = mkindices(values, indices)
|
||
|
for (i = 1; i <= count; i++) {
|
||
|
if (i > 1) s = s sep
|
||
|
s = s values[indices[i]]
|
||
|
}
|
||
|
s = s suffix
|
||
|
return s
|
||
|
}
|