проблема awk (возвращает массив из пользовательской функции)

у меня есть эта функция (преобразование координаты геоида WGS84 в декартовые координаты...не имеет значения):

  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 (esp. для меня)

2 ответов


немного поздно, но вот решение я использовал:

Я отправил переменную, которую я хотел заполнить в качестве параметра функции:

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

тогда вы можете рассматривать переменную результата как массив вне функции

надеюсь, это поможет кому-то искать ответ


обработать массив как глобальный. AWK не может возвращать массивы.