2012-09-10 58 views
7

我有這個功能(轉換的WGS84大地水準面直角座標系座標...無所謂):awk的問題(返回從用戶定義函數的數組)

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 

什麼是迴歸問題作爲一個數組?有沒有不同的語法?

我可以使用:

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

甚至:

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

,然後只用變量coord_enu作爲一個全球性的?

但它看起來與return語句的使用更好的(特別是對我來說)

+1

刪除所有行連續字符。他們不需要,[可能會導致問題](http://stackoverflow.com/q/12349873/7552),並肯定會妨礙可讀性。 –

回答

11

晚了一點,但這裏是我使用的解決方案:

我送,我想填充作爲參數傳遞給函數的變量:

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

然後,你可以把結果變量作爲數組以外的函數

希望這可以幫助尋找答案的人

+0

「永遠不會太晚」:D! 所以我可以'awk'函數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];}「' 謝謝! – static

6

對待數組作爲全球。 AWK不能返回數組。

+0

你能否提供一個參考? – static

+0

@sergj:'gawk'輸出的錯誤信息更具信息性:「嘗試在標量上下文中使用數組'coord_enu'」。我將繼續尋找文檔,但在'gawk'或'mawk'手冊中沒有明確說明。 –

+0

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