2012-09-10 13 views
7

Ho questa funzione (conversione di coordinate di un geoide WGS84 in coordinate cartesiane ... non importa):problema awk (restituire una matrice da funzione definita dall'utente)

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 

Qual è il problema di ritorno come una matrice? C'è qualche sintassi diversa?

ho potuto utilizzare:

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

o anche:

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

e poi basta utilizzare la variabile coord_enu come globale?

Ma sembra meglio con l'uso di return (esp. Per me)

+1

rimuovere tutti i caratteri di continuazione della riga. non sono necessari, [potrebbe causare problemi] (http://stackoverflow.com/q/12349873/7552), e certamente ostacolano la leggibilità. –

risposta

11

Un po 'in ritardo, ma qui è una soluzione che ho usato:

ho inviato una variabile che volevo riempito come un parametro alla funzione:

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

allora, è possibile trattare la variabile risultato come un array al di fuori della funzione

spero che questo aiuti qualcuno a cercare una risposta

+0

"mai troppo tardi": D! così posso "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];} "' grazie! – static

6

Trattare l'array come globale. AWK non può restituire gli array.

+0

potresti fornire un riferimento? – static

+0

@sergj: il messaggio di errore che le uscite 'gawk' è più informativo:" tenta di usare array 'coord_enu' in un contesto scalare ". Continuerò a cercare la documentazione, ma non è esplicita nei manuali 'gawk' o' mawk'. –

+0

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

Problemi correlati