唤起那些年你对IDL的记忆
Posted 流浪若相惜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了唤起那些年你对IDL的记忆相关的知识,希望对你有一定的参考价值。
上一节唤起那些年你对IDL的记忆(一),我们已经对IDL的基础–数组有了比较深的说明,之所以我在写第一篇时复制了大量的IDL-Help的说明,目的是为了让跟我一样初学IDL的同学们能记住一点,就是不要脱离了IDL-Help去学习IDL。其实,说白了任何一种语言的学习,并不是说你获得了一本内容非常丰富的书,你把它看了几遍,你就掌握了这门语言,除了你要不断的书写程序,还有一点比较重要的就是学会查看API。
因此,学会如何查看IDL-Help,并且有意识的遇到不懂或者忘记的,就去看Help,个人觉得这是快速学习任何一种语言最有效,也是最快速的方法。
字符串
字符串创建
创建一个字符串,可以使用“”或者‘’
IDL> s1="abdsde"
IDL> s2=strarr(6)
IDL> help,s2
S2 STRING = Array[6]
IDL> s3="11
IDL> print,s3
9
IDL> ;"代表8进制,输出是十进制:9
IDL> str="abaed""
IDL> print,str
abaed"
IDL> str="abaed'"
IDL> print,str
abaed'
IDL>
字符串连接
字符串连接直接用“+”
IDL> print,s1
abdsde
IDL> print,str
abaed'
IDL> s3=s1+str
IDL> print,s3
abdsdeabaed'
字符串转换
使用类型转换函数可以将字符串转换成其它数据类型。字符串可以直接转换成字节类型(byte),而整形、浮点型等其它类型不允许转换,需要先将字符串转换成字节类型,再转为其它类型。逆变换也是如此。
IDL> print,s1
abdsde
IDL> print,byte(s1)
97 98 100 115 100 101
IDL> print,fix(s1)
% Type conversion error: Unable to convert given STRING to Integer.
% Detected at: $MAIN$
0
IDL> print,fix(byte(s1))
97 98 100 115 100 101
IDL> print,string[97,98,100,115,100,101]
% Variable is undefined: STRING.
% Execution halted at: $MAIN$
IDL> print,string([97,98,100,115,100,101])
97 98 100 115 100 101
IDL> print,string(byte([97,98,100,115,100,101]))
abdsde
这里实际上转换的依据是ASCII码,附上一张ASCII码表
图1 ASCII码表
处理函数
在这里只附上一张处理函数表方便常用的字符串处理函数查找,更加详细的介绍请自行查阅IDL-Help:
图2字符串处理函数表
特殊字符
IDL支持绝大多数的ASCII码显示输出,下表所列的特殊字符无法打印输出
图3 特殊字符
结构体
IDL-Help给采购员Structure数据结构的定义如下:
A compound data type that contains pairs of tags and values, where the values can be of any data type. Once a structure is created, neither the tags nor the data types of the values associated with the tags can be changed.
董老师的书中是这样说明结构体的:
结构体是一种复合变量,它可以是变量、数组或结构等类型的集合,通常用于程序参数传递或数据交换。
其实,说白了这就是一种数据结构。
结构体可以分为:命名结构体和匿名结构体
命名结构体
创建用,同时赋予结构体名字。
格式:name,tag1:value1,tag2,value2…
IDL> help,str1,a:1,b:2
** Structure STR1, 2 tags, length=4, data length=4:
A INT 1
B INT 2
命名结构体支持结构体继承,例如:
IDL> struct2=str2,inherits str1,c:3
IDL> help,struct2,/structure
** Structure STR2, 3 tags, length=6, data length=6:
A INT 0
B INT 0
C INT 3
匿名结构体
IDL> str=name:'ergou',sex:'女',shcool:"SDAU"
IDL> HELP,str
** Structure <a3a77a0>, 3 tags, length=48, data length=48, refs=1:
NAME STRING 'ergou'
SEX STRING 'Ů'
SHCOOL STRING 'SDAU'
注:这里有个问题就是汉字不识别,编码设置中没有GB2312编码方式
访问结构体
通过“变量名.成员名”或者“变量名.(index)”
IDL> help,str
** Structure <a3a77a0>, 3 tags, length=48, data length=48, refs=1:
NAME STRING 'ergou'
SEX STRING 'Ů'
SHCOOL STRING 'SDAU'
IDL>
IDL> print,str.Name
ergou
IDL> print,str.(0)
ergou
结构体操作函数
图4 结构体操作函数
遍历结构体成员
PRO traverse_struct
struct1=a:1,b:2,c:3,d:4
;获取成员数量
tagNumber=N_Tags(struct1)
;获取成员名字
tagName=Tag_Names(struct1)
FOR i=0,tagNumber-1 DO BEGIN
PRINT,'Name:',tagName[i],'Value:',struct1.(i)
ENDFOR
END
遍历结果:
Name:AValue: 1
Name:BValue: 2
Name:CValue: 3
Name:DValue: 4
以上是关于唤起那些年你对IDL的记忆的主要内容,如果未能解决你的问题,请参考以下文章