您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > IDL(数据分析和图像化应用程序及编程语言)培训
IDL高级培训基础篇基础篇-语法基础1.变量及其属性数据类型字节值域创建类型函数字节10~2550Bbyte()16位有符号整型2-32,768~32,7670fix()32位有符号整型40Llong()64位有符号整型80LLlong64()16位无符号整型20~655350Uuint()32位无符号整型40~2^32-10ULulong()64位无符号整型80~2^64-10ULLulong64()浮点型4±10^380.0float()双精度浮点型80.0Ddouble()复数8complex(0.0,0.0)complex()双精度复数16complex(0.0D,0.0D)dcomplex()字符串0~32767‘’或“”string()指针4ptr_new()-对象4obj_new()-•整型为短整型,注意使用L•变量的属性是动态改变的var=5为整型var=var*2.0变为浮点•NaN:!VALUES.F_NAN、!VALUES.D_NANvar=!VALUES.F_NAN,则finite(var)=1基础篇-语法基础2.数组IDL是面向矩阵的语言,几乎所有运算都可以在数组上使用。数组表达:array[n,m]表示n列m行(与其他语言有别),按行排列,0为下标起点数组引用:array[subscript],或(array)[subscript]下标语法:e、e0:e1、e:*、*、array。array=make_array(10,10,/integer),sub=indgen(12)合法的下标表示:array[5,5]、array[2:3,5]、array[*,4]、array[*,5:8]、array[4,4:*]、array[sub]、A[[1,3,5],7:9]reform():array[4,4:*]为1列4行(列向量),reform(array[4,4:*])则为4列1行(行向量)常数的数组表示:var=5,则var[0]=5(合法!)赋值:array[[2,4,6],5]=[4,16,36]where():array[where(arraylt0)]=-999数学运算:与普通变量基本相同。*和/:表示两个同维数数组对应元素运算arr1=indgen(5)+1,arr2=arr1。则:arr1*arr2=[1,4,9,16,25],arr1/arr2=[1,1,1,1]#和##:矩阵运算arr1(n1,m)#arr2(m,n2)=arr(n1,n2),arr1(n,m1)##arr2(m2,n)=arr(m2,m1)数组串连:arr1(5,6),arr2(5,2)。则:arr3=[[arr1],[arr2]]为(5,8)注意:arr3=[arr1,arr2]不合法!(一维除外)数据类型初始化函数产生索引值函数创建字节bytarrbindgen16位有符号整型intarrindgen32位有符号整型lonarrlindgen64位有符号整型lon64arrl64indgen16位无符号整型uintarruindgen32位无符号整型ulonarrulindgen64位无符号整型ulon64arrul64indgen浮点型fltarrfindgen双精度浮点型dblarrdindgen复数complexarrcindgen双精度复数dcomplexarrdcindgen字符串strarrslindgen指针ptrarr-对象objarr-其他常用函数:array_equal、rebin()、congrid()、expand()、reverse()数组常用函数:基础篇-语法基础基础篇-语法基础3.结构一种复合变量,它可以将多种类型的数据存储在一个变量中,对于表示意义相关的数据、程序间交换数据均非常有意义。类型及定义命名结构:dot={PIXEL,x:128,y:236,color:bytarr(3)},定义后可使用FIXEL定义其他结构dot1={PIXEL,x:58,y:46,color:[255,0,255]}、dot2={PIXEL,58,46,[255,0,255]}、dot3={PIXEL}匿名结构:person={name:’jack’,id:123456L},定义后无固定结构,可任意改变person={name:’jack’,id:123456L,phone:’123-4567’}引用变量引用:使用变量名或变量在结构中的位置索引。如:dot.x或dot.(0)数组变量:s={arr:indgen(10)},则s.arr=10将数组所有元素赋值为10。结构数组定义:dotarr=replicate({PIXEL},10),或dotarr=replicate(dot,10)引用:dotarr[1].x=10、dotarr.x=10将所有结构的x赋值为10、dotarr.y=indgen(10)结构中的变量的类型和(数组)大小结构定义后,各变量的数据类型以及数组变量的维数均不可改变。当使用中出现不一致时向原类型转换,不能转换时报错。var=dot.x*1.0=128.0,为浮点,而dot.x=dot仍为整型。s.arr=-indgen(8)会改变s.arr中前8个元素的值,而s.arr=-indgen(11)会出错。结构继承dot3d={POINT,INHERITSPIXEL,z:0}常用函数creat_struct()、n_tags()、tag_names()、struct_assign()基础篇-语法基础4.指针建立动态数据结构的有效工具,是实现IDL面向对象编程和Widget编程的基本要素之一。IDL的指针与其他语言的指针有很大的不同,它不是指向存储的地址而仅仅是一个轻型的指向一个堆变量的引用(指针变量)。堆变量可以动态分配(数据类型和数组维数),这意味着传递指针变量就相当于传递动态数据。PointerReferencePointerDataPointerinHeapVariables指针基本操作创建:ptr=ptr_new([initexpr][,/allocate_heap][,/no_copy])释放:ptr_free,ptr•标量•数组•结构基础篇-语法基础标量指针创建:v=5.5,p=ptr_new(v)引用:print,p,*p;p1=p,*p1=20,print,*p数组指针创建:arr=findgen(10),p=ptr_new(arr)引用:print,(*p)[5]结构指针创建:s={name:’joe’,age:40,height:180},p=ptr_new(s)引用:print,(*p).name结构内指针创建:rec={lon:120,lat:20,data:ptr_new(findgen(2,10))},p=ptr_new(rec)引用:*(*p).data=findgen(2,20)特殊指针Null指针:nptr=ptr_new(),仅定义一个指针,并不指向一个堆变量。引用时需重新定义指针。Empty指针:eptr=ptr_new(/allocate_heap),定义一个指向一个堆变量的指针,但并未定义变量,引用时可以直接定义变量指针释放ptr_free,ptr相关函数ptr_valid():ptr_valid(nptr)=0,ptr_valid(eptr)=1heap_gc:释放没有引用的堆变量指针数组ptrarr(d1,...,d8[,/allocate_heap])基础篇-编程基础IDLDE是IDL的集成开发环境,可以使用IDL命令进行交互式命令运行,编写、调试、运行IDL程序,使用GUIBuiler开发用户界面,使用项目管理器管理工程项目等。1.IDL程序批处理:由一系列IDL命令组成,以IDL-@batchfile方式运行。批处理文件运行时并不编译,因此使用控制结构时必须大量使用续行符($),给书写、理解造成困难。主程序:与批处理相似,但以end结束,以IDL-.runprofile方式运行。主程序运行时先编译,因此可以正常使用控制结构。过程:与主程序相似,但以proproname开始,以end结束。以IDL-proname方式运行(也可以先运行IDL-.compileproname,编译但不运行)。函数:与过程相似,但以functionfnname开始,以end结束,并以return语句返回一个IDL变量。以IDL-ret=fnname(para_list)方式运行。在IDL系统中,一个过程或函数即为一个新的IDL命令。变量作用范围:批处理和主程序方式的变量为全局变量,可以在IDL开发环境中使用。过程和函数的变量为局部变量,只在过程和函数运行过程中有效。基础篇-编程基础2.参数传递位置参数:在参数列表中按位置列出参数名,严格的顺序限制。通常用于必选参数。定义:probatch,para1,para2,...调用:IDL-batch,para1,para2,…关键字参数:关键字参数与位置无关,且可以与位置参数混合位置。通常放在位置参数之后,用于可选参数。定义:probatch,keywordname=keywordsymbol,...调用:IDL-batch,keywordname=keywordsymbol,…IDL-batch,/keywordname注意:keywordname用于定义,keywordsymbol用于调用。引用传递和值传递:所有变量为引用传递,其值会被修改。系统变量、下标变量、表达式和常量均为值传递,原变量的值不被修改。参数传递了吗?传递了什么?n_params():返回位置参数的个数keyword_set():关键字参数为不为0常量或已定义的引用传递时返回1,否则返回0arg_present():关键字参数为引用传递时返回1(无论是否定义),否则返回0n_elements():关键字参数未传递或未定义返回0,否则返回非0数基础篇-编程基础3.错误处理on_ioerror:当出现I/O错误时,跳转指定的语句。两种用途:跳过错误返回或跳过错误继续。注意:使用on_ioerror,nullon_error:当程序运行出错时,并不执行一个新的语句,而是指明IDL应该怎样做。可以设置on_error,1,或在命令行使用retallcatch:格式:catch,error_var。当程序执行到catch语句时,IDL为改模块记录一个错误处理语句,并将error_var赋值为0。若程序执行出错,则给error_var赋值相应的错误码,然后跳转到catch后第一条语句。注意:使用catch,/cancel值行动0立即停止。缺省1立即停止,返回主程序2立即停止,返回程序调用模块3立即停止,返回程序模块ErrororExceptionisGeneratedIsitanI/Oerror?IsthereanerrorhandlerdefinedbytheCATCHroutine?IsON_IOERRORroutineinuse?HandleerrorasindicatedbysettingofON_ERRORroutineorusedefaulterrorhandling.HandleerrorasindicatedbyON_IOERRORsetting.HandleerrorwithCATCH-definederrorhandlerandcontinueprogramexecution.YesYesYesNoNoNo基础篇-编程基础IDL出错处理示意基础篇-编程基础4.编译与运行批处理:@bacthfile,运行主程序:.run,编译、运行过程和函数:.compile,编译;-proname,编译、运行。编译规则:(1)编译到主程序后,编译停止(2)编译到与文件同名的程序模块时,停止编译(3)编译到文件末尾或适合其他规则时,停止编译自动编译规则:当过程或函数出现在命令或代码中时,会自动
本文标题:IDL(数据分析和图像化应用程序及编程语言)培训
链接地址:https://www.777doc.com/doc-3692625 .html