2012-09-10 10 views
7

Tengo esta función (la conversión de coordenadas WGS84 de un geoide de coordenadas cartesianas ... no importa):tema awk (devolver una matriz de función definida por el usuario)

function convert_geo_to_enu(coord_geo) { \ 
    xi=sqrt(1 - e*e*sin(coord_geo[1])*sin(coord_geo[2])); \ 
     \ 
     coord_enu[1]=(a/xi + coord_geo[3])*cos(coord_geo[1])*cos(coord_geo[2]); \ 
     print coord_enu[1] " hhh " ; \ 
     coord_enu[2]=(a/xi + coord_geo[3])*cos(coord_geo[1])*sin(coord_geo[2]); \ 
     coord_enu[3]=(a*(1-e*e)/xi0 + coord_geo[3])*sin(coord_geo[1]); \ 
    \ 
    return coord_enu \ # <-- here comes the problem 
    } \ 


problem --> mawk: line 64: illegal reference to array coord_enu 

¿Cuál es el problema de volver como una matriz? ¿Hay alguna sintaxis diferente?

que podría utilizar:

function convert_geo_to_enu(coord_geo, coord_enu) { \ 
     ... 
     coord_enu[1]=... 
     ... 
    } \ 

o incluso:

function convert_geo_to_enu(coord_geo) { \ 
     ... 
     coord_enu[1]=... 
     ... 
    } \ 

y luego sólo tiene que utilizar la variable coord_enu como global?

Pero se ve mejor con el uso de la instrucción de retorno (esp. Para mí)

+1

eliminar todos los caracteres de continuación de línea. no son necesarios, [pueden causar problemas] (http://stackoverflow.com/q/12349873/7552), y ciertamente dificultan la legibilidad. –

Respuesta

11

Un poco tarde, pero aquí es una solución utilicé:

envié una variable que quería lleno como parámetro a la función:

function myfunct(result, array_size) { 
    for(i = 1; i <= array_size; i++) { 
     result[i] = ##whatever you want 
    } 
} 

a continuación, se puede tratar a la variable de resultado como una matriz fuera de la función

espero que esto ayude a alguien que busque una respuesta

+0

"nunca es demasiado tarde": D! para que pueda 'awk 'function myfunct (result, array_size) {for (i = 1; i <= array_size; i ++) {result [i] = i + 1}; print result [1];} BEGIN {abc = myfunct (a, 3); print a [3];} "' ¡gracias! – static

6

Tratar la matriz como global. AWK no puede devolver matrices.

+0

¿podría proporcionar una referencia? – static

+0

@sergj: El mensaje de error de que los resultados de 'gawk' son más informativos:" intento de utilizar la matriz 'coord_enu' en un contexto escalar ". Continuaré buscando documentación, pero no está explícita en los manuales 'gawk' o' mawk'. –

+0

La referencia: https://www.gnu.org/software/gawk/manual/html_node/Pass-By-Value_002fReference.html –

Cuestiones relacionadas