# -*- 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 }