2012-09-10 14 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 
    } 
} 

そして、あなたはANと結果変数を扱うことができます関数の外側の配列

これは誰かが答えを探しているのに役立ちます。

+0

「決して遅すぎない」:D! (結果、array_size){結果(i = 1; i <=配列サイズ; i ++){結果[i] = i + 1};結果の印刷[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 –

関連する問題