当前位置: 代码迷 >> 综合 >> ENVI+IDL二次开发入门-过程和函数编写
  详细解决方案

ENVI+IDL二次开发入门-过程和函数编写

热度:87   发布时间:2023-11-25 11:17:06.0

ENVI IDL程序文件以“pro” 或者“function”开头,以“end”结尾,需要先有IDL编译器编译成程序模块(快捷键Ctrl+F8),然后运行(快捷键F8)。IDL中过程和函数保存的文件后缀都是”.pro”作为扩展名。(ASCII码文件)

1.过程

过程是IDL使用最多的程序方式,“pro”之后为过程名称,同时也可以有若干各参数后关键字,{如果过程包含参数或者关键字的话,需要通过在命令行输入过程名称+参数、关键字的方式来运行,语句为:过程名[,参数1,...,参数n][,关键字1,...,关键字m]}
过程格式如下:
pro 过程名[,参数1...,参数n][,关键字1...,关键字m]命令序列(需要编写的代码行)
end

示例:

Pro test
;将角度转换为弧度deg = 180radian = deg*!dtorprint,radian
end

结果:
IDL> .compile -v 'C:\Users\Administrator\IDLWorkspace\enviProject\test.pro'
% Compiled module: TEST.
IDL> test
% Compiled module: TEST.
3.14159
IDL>

2.函数

函数在建立、编辑、保存和编译上,与过程非常相似,区别是函数运行后会返回一个值。函数以“function”语句开始,以“return”语句返回函数的计算结果,以“end”语句结束。
函数格式如下:
function 函数名[,参数1...,参数n][,关键字1...,关键字m]命令序列(需要编写的代码行)return,表达式
end

示例:

function test,radian 
;弧度转换为角度deg =  radian*!RADEGreturn,radian
end 

结果:
IDL> .compile -v 'C:\Users\Administrator\IDLWorkspace\enviProject\testfunc.pro'
% Compiled module: TEST.
IDL> test(!PI)
3.1415927
IDL>

函数和程序同时使用的示例{在保存文件名时,以pro 过程名作为文件 名,否则在运行的时候会出错}
{错误情况如下:
IDL> .compile -v 'C:\Users\Administrator\IDLWorkspace\enviProject\calculate.pro'
% Compiled module: TEST1.
% Compiled module: CALCULATE.
IDL> calculate
% Compiled module: TEST1.
% Compiled module: CALCULATE.
% Compiled module: CALCULATE.
% Attempt to call undefined procedure: 'CALCULATE'.
% Execution halted at: $MAIN$
IDL>

pro test1x=2 & y=3 & z=4volume = calculate(x,y,z)print,'体积',volume
endfunction calculate,x,y,z
;计算体积return, x*y*z
end

结果:
IDL> .compile -v 'C:\Users\Administrator\IDLWorkspace\enviProject\test1.pro'
% Compiled module: TEST1.
% Compiled module: CALCULATE.
IDL> test1
% Compiled module: TEST1.
% Compiled module: CALCULATE.
体积 24
IDL>

IDL的过程、函数之间可以相互调用,从而组合出更为复杂的程序,或用于将经常重复的部分携程独立模块用于简化程序。程序的相互调用往往需要利用参数和关键字传递数据。

参数必须先定义再使用,使用时顺序和类型要与定义时保持一致。
关键字也必须先定义再使用,关键字依靠名字进行定位。除了传递数据外,关键字孩子可以用于缓解或功能设施选项的“开关”,可以用“/关键字”表达“关键字=1”的含义。

  相关解决方案