唤起那些年你对IDL的记忆(二)

来源:互联网 发布:外网访问centos 编辑:程序博客网 时间:2024/05/21 11:33

上一节唤起那些年你对IDL的记忆(一),我们已经对IDL的基础–数组有了比较深的说明,之所以我在写第一篇时复制了大量的IDL-Help的说明,目的是为了让跟我一样初学IDL的同学们能记住一点,就是不要脱离了IDL-Help去学习IDL。其实,说白了任何一种语言的学习,并不是说你获得了一本内容非常丰富的书,你把它看了几遍,你就掌握了这门语言,除了你要不断的书写程序,还有一点比较重要的就是学会查看API。
因此,学会如何查看IDL-Help,并且有意识的遇到不懂或者忘记的,就去看Help,个人觉得这是快速学习任何一种语言最有效,也是最快速的方法。

字符串

字符串创建

创建一个字符串,可以使用“”或者‘’

IDL> s1="abdsde"IDL> s2=strarr(6)IDL> help,s2S2              STRING    = Array[6]IDL> s3="11IDL> print,s3       9IDL> ;"代表8进制,输出是十进制:9IDL> str="abaed""IDL> print,strabaed"IDL> str="abaed'"IDL> print,strabaed'IDL> 

字符串连接

字符串连接直接用“+”

IDL> print,s1abdsdeIDL> print,strabaed'IDL> s3=s1+strIDL> print,s3abdsdeabaed'

字符串转换

使用类型转换函数可以将字符串转换成其它数据类型。字符串可以直接转换成字节类型(byte),而整形、浮点型等其它类型不允许转换,需要先将字符串转换成字节类型,再转为其它类型。逆变换也是如此

IDL> print,s1abdsdeIDL> print,byte(s1)  97  98 100 115 100 101IDL> print,fix(s1)% Type conversion error: Unable to convert given STRING to Integer.% Detected at: $MAIN$                 0IDL> print,fix(byte(s1))      97      98     100     115     100     101IDL> 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      101IDL> 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.NameergouIDL> 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)  ENDFOREND

遍历结果:

Name:AValue:       1Name:BValue:       2Name:CValue:       3Name:DValue:       4
1 0
原创粉丝点击