commit bc9fa5e1857a61091bc200ac695bf49fab82d11a
parent 73eecb05ef1671893e9d8a4cd1a49cc32ec7bd5e
Author: Jan Pobrislo <ccx@wpr.cz>
Date: Wed, 23 Sep 2015 03:42:51 +0200
fixups of data.awk
Diffstat:
| M | data.awk | | | 65 | +++++++++++++++++++++++++++++++++++++++++------------------------ |
1 file changed, 41 insertions(+), 24 deletions(-)
diff --git a/data.awk b/data.awk
@@ -56,7 +56,7 @@ state == 1 {
m = match($0, ident_re)
varname = substr($0, m, RLENGTH)
V[varname] = substr($0, m+1+RLENGTH)
- if(DEBUG) printf "got scalar: %s ⇒ %s (%d)\n", varname, V[varname], m >"/dev/stderr"
+ if(DEBUG) printf "got scalar: %s = %s (%d)\n", varname, V[varname], m >"/dev/stderr"
next
}
@@ -102,32 +102,44 @@ function find(varname, i, n, names, values, loopvar, looprow, prefix) {
continue
loopvar = loop_stack[i, "var"]
looprow = loop_stack[i, "row"]
- if(varname == prefix"_index")
- return looprow
- if(varname == prefix"_index0")
- return looprow - 1
- if(varname == prefix"_revindex")
- return V[loopvar, "rows"] - looprow + 1
- if(varname == prefix"_revindex0")
- return V[loopvar, "rows"] - looprow
- if(varname == prefix"_first")
- return looprow == 1
- if(varname == prefix"_last")
- return looprow == V[loopvar, "rows"]
- if(varname == prefix"_length")
- return V[loopvar, "rows"]
+ if(varname == prefix"_index") {
+ found = looprow
+ return 1
+ }
+ if(varname == prefix"_index0") {
+ found = looprow - 1
+ return 1
+ }
+ if(varname == prefix"_revindex") {
+ found = V[loopvar, "rows"] - looprow + 1
+ return 1
+ }
+ if(varname == prefix"_revindex0") {
+ found = V[loopvar, "rows"] - looprow
+ return 1
+ }
+ if(varname == prefix"_first") {
+ found = looprow == 1
+ return 1
+ }
+ if(varname == prefix"_last") {
+ found = looprow == V[loopvar, "rows"]
+ return 1
+ }
+ if(varname == prefix"_length") {
+ found = V[loopvar, "rows"]
+ return 1
+ }
split(V[loopvar, "fields"], names)
for(n in names) {
if(varname == (prefix names[n])) {
split(V[loopvar, looprow], values)
- return values[n]
+ found = values[n]
+ return 1
}
}
}
if(!(varname in V)) {
- if(DEBUG) {
- print "variable not found: " varname >"/dev/stderr"
- }
return 0
}
found = V[varname]
@@ -137,10 +149,14 @@ function find(varname, i, n, names, values, loopvar, looprow, prefix) {
function get(varname) {
if(!find(varname)) {
if(ENVIRON["DATA_AWK_EMPTY_GET"]) {
- return ""
+ if(DEBUG) {
+ print "variable not found: " varname >"/dev/stderr"
+ }
+ found = ""
+ } else {
+ print "error: undefined variable '"varname"'" >"/dev/stderr"
+ exit 1
}
- print "error: undefined variable '"varname"'" >"/dev/stderr"
- exit 1
}
if(DEBUG) {
print "get →" varname "← = →"found"←" >"/dev/stderr"
@@ -155,9 +171,10 @@ function or_(a, b) {
END {
if(DEBUG) {
print "--- loaded keys ---" >"/dev/stderr"
- for(key in V)
- printf("%s\t→%s←\t", key, V[key]) >"/dev/stderr"
+ for(key in V) {
+ printf("%s\t→%s←\n", key, V[key]) >"/dev/stderr"
printf(">> %d →%s←\n", find(key), found) >"/dev/stderr"
+ }
print "-------------------" >"/dev/stderr"
}
}