唤起那些年你对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的记忆的主要内容,如果未能解决你的问题,请参考以下文章

唤起你对c#曾经的记忆

多米音乐关闭!你对塞班时代的记忆还有那些?

我国人均GDP将迈上1万美元台阶,2020年你对收入有什么期待?

那些年你用过最好的键盘

那些年你不能错过的之Spring事务

那些年你不知道的微服务架构的九大特性