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 एक वैश्विक रूप में प्रयोग करते हैं?

लेकिन यह (मेरे लिए। Esp) वापसी कथन के उपयोग के साथ बेहतर लग रहा है

+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

"बहुत देर हो चुकी नहीं": डी! इसलिए मैं 'awk "फ़ंक्शन myfunct (परिणाम, array_size) {के लिए (i = 1; i <= array_size; i ++) {परिणाम [i] = i + 1}; प्रिंट परिणाम [1];} BEGIN {abc = myfunct (ए, 3); एक प्रिंट करें [3];} "' धन्यवाद! – static

6

वैश्विक रूप सरणी उपचार करें। एडब्ल्यूके सरणी वापस नहीं कर सकता है।

मैं एक चर मैं कार्य करने के लिए एक पैरामीटर के रूप भरा चाहते थे भेजा:

+0

क्या आप एक संदर्भ प्रदान कर सकते हैं? – static

+0

@sergj: त्रुटि संदेश जो 'गॉक' आउटपुट अधिक जानकारीपूर्ण है: "स्केलर संदर्भ में सरणी 'coord_enu' का उपयोग करने का प्रयास करें"। मैं प्रलेखन की तलाश जारी रखूंगा, लेकिन यह 'गॉक' या 'मॉक' मैनुअल में स्पष्ट नहीं है। –

+0

संदर्भ: https://www.gnu.org/software/gawk/manual/html_node/Pass-By-Value_002fReference.html –

संबंधित मुद्दे