• IDL学习:语法基础-字符串


    1. 创建字符串

            IDL中可以用单引号‘’或双引号""来创建字符转       

    1. >>a = 'hlz'
    2. >>b = "hlz"
    3. >>a eq b
    4. 1

            创建字符串数组,可以利用中括号[]和逗号,相组合的方式进行创建

    1. >>a = ['Hlz','XMU','厦门']
    2. >>a
    3. Hlz
    4. XMU
    5. 厦门
    6. >>help,a
    7. A STRING = Array[3]
    8. >>a[1] ; 字符串数组是可以被索引,只能索引整个元素,无法索引某个元素组成
    9. XMU

    注:字符串是无法索引的,字符串数组可以,可以用字符串提取(截取)函数Strmid()实现,这个往往会用到字符转长度查看函数Strlen()、子字符串搜索函数Strpos()、去除字符串首尾空格函数Strtrim()。

    语法:Result = STRMID(Expression, First_Character [, Length] , /REVERSE_OFFSET )

    语法:Result = STRLEN(Expression)

    语法:Result = STRPOS( Expression, Search_String [, Pos], /REVERSE_OFFSET, /REVERSE_SEARCH )

    语法:Result = STRTRIM( String [, Flag] )

    1. >>a = 'hlz-xiamenuniversuty'
    2. >>a[2]
    3. % Attempt to subscript A with
    4. 2)> is out of range.
    5. % Execution halted at: $MAIN$
    6. >>a = 'hlz-xiamenuniversuty' ; 包含前后空格的字符串a
    7. >>print,Strlen(a) ; 查看字符串a的长度
    8. 22
    9. >>a = Strtrim(a,2) ; 移除两端空格,0:移除右端所有空格;1:移除左端所有空格;2:移除左右两端所有空格
    10. >>print,Strlen(a)
    11. 20
    12. >>; 提取字符串中xiamen子字符串
    13. >>index1 = Strpos(a,'xiamen') ; 字符串'xiamen'在字符串a的的位置,返回子字符串的起始位置,若不存在则返回-1
    14. >>index1
    15. 4
    16. >>leng_str = Strlen('xiamen') ; 字符串'xiamen'的长度
    17. >>leng_str
    18. 6
    19. >>b = Strmid(a,index1,leng_str) ; 提取字符串a中的子字符串
    20. >>b
    21. xiamen

    创建空字符串,可以利用StrArr()函数,进行创建;

    语法:Result = STRARR(D1[, ..., D8])

    1. >>S = STRARR(4,3) ; 创建43行的空的字符串数组
    2. >>help,S
    3. S STRING = Array[4, 3]
    4. >>S[1,1] ; 查看元素值
    5. >>help,S[1,1] ; 查看元素值
    6. STRING = ''

    2. 字符串操作

    2.1 字符串的信息

            IDL中无法用length对象方法查看字符串的长度,可以利用字符转长度查看函数Strlen()查看

    1. >>a = 'hlz-xiamenuniversuty'
    2. >>a.LENGTH
    3. 1
    4. >>a.DIM
    5. 0
    6. >>print,Strlen(a)
    7. 20

            当用函数Strlen()查看字符串数组时,会实现每个字符串元素的长度。

    1. >>Files
    2. e:\Test\1.tff
    3. e:\Test\2.jpg
    4. >>print,Strlen(files)
    5. 13 13
    6. >>help,Strlen(files)
    7. LONG = Array[2]

            此外,字符串数组中元素的个数可以用length方法、函数N_elements()获取。

    1. >>Files
    2. e:\Test\1.tff
    3. e:\Test\2.jpg
    4. >>print,files.LENGTH
    5. 2
    6. >>print,N_elements(files)
    7. 2

    2.2 字符串连接

            IDL中字符串连接和python一样,可以直接相加

    1. >>a = 'hlz'
    2. >>b = 'xmu'
    3. >>c = a+'\'+b+'.jpg'
    4. >>c
    5. hlz\xmu.jpg

            字符串数组元素之间相连接,可以使用jion方法进行连接

    1. >>a = ['Hlz','jiangxiprovince','jingdezhenCity']
    2. >>b = a.Join('\') ; 将a中所有元素用\相连接
    3. >>b
    4. Hlz\jiangxiprovince\jingdezhenCity

             注:当将字符串连接起来,组成一个文件路径是,最好用Path_sep()函数,该函数可以获取当前系统的分隔符,linux和win不同,分隔符是不一样的;win的分隔符为‘\’;linux的分隔符为‘/’。

    2.3 字符串转换

            字符串大小写转化函数

            Strlowcase():将大写字符转化为小写字符

            Strupcase():将小写字符转化为大写字符

    语法:Result = STRLOWCASE(String)

    语法:Result = STRUPCASE(String)

    1. >>a = 'Hulz_Jiangxi_OK'
    2. >>print,Strlowcase(a)
    3. hulz_jiangxi_ok
    4. >>print,Strupcase(a)
    5. HULZ_JIANGXI_OK

            首字母大写:那么问题来了,如何将首字母转化为大写,其余字母小写。

            首先,将字母转化为小写,提取除首字母以外的字符,提取第一个字母并转化为大写,最后合并。用到了Strlowcase()、Strupcase()、Strmid()函数。

    1. >>a = 'Hulz_Jiangxi_OK'
    2. >>print,Strlowcase(a) ; 第一步:转化为小写
    3. hulz_jiangxi_ok
    4. >>print,Strmid(Strlowcase(a),1); 第二步:提取字符串(小写部分)
    5. ulz_jiangxi_ok
    6. >>print,Strupcase(Strmid(Strlowcase(a),0,1)); 第二步:提取字符串(大写部分)
    7. H
    8. >>print,Strupcase(Strmid(Strlowcase(a),0,1))+Strmid(Strlowcase(a),1);第三步:合并
    9. Hulz_jiangxi_ok

            此外,字符串可以直接转化为字节型Byte数据,即将字母转化为对应的数字,反之亦然。

    1. >>a = 'hlz'
    2. >>b = Byte(a)
    3. >>b
    4. 104 108 122
    5. >>help,b
    6. B BYTE = Array[3]
    7. >>c = long(a)
    8. % Type conversion error: Unable to convert
    9. given STRING to Long.
    10. % Detected at: $MAIN$
    11. >>d = long(Byte(a))
    12. >>d
    13. 104 108 122

    2.4 字符提取

            可以用函数Strmid()实现,具体介绍见本博客第1节

    2.5 常见的字符串函数

    2.5.1 获取文件名

            可以用File_basename()函数,根据字符串获取文件名

            语法:Result = File_basename(Path [, RemoveSuffix] [, /FOLD_CASE])

    1. >>fn = File_basename('e:\Test\sentinel1.tiff')
    2. >>fn
    3. sentinel1.tiff

    2.5.2 获取文件路径

            可以用File_dirname()函数,根据字符串获取文件路径

            语法:Result = FILE_DIRNAME(Path [, /MARK_DIRECTORY])

    1. >>dn = File_dirname('e:\Test\sentinel1.tiff')
    2. >>dn
    3. e:\Test

    2.5.3 获取编译文件的完整路径

            可以用Routine_filepath()函数,根据编译的文件名,获取该文件的完整路径(字符串)。

            注:需先编译文件,才能使用。

            语法:Result = ROUTINE_FILEPATH( [Routine] [, /EITHER] [, /IS_FUNCTION] )

            返回的是一个包含两个元素的结构体,Result .Name表示文件名,Result.path表示文件路径。

    1. >> .compile -v 'D:\Code\IDL\IDL_GUI\源码\chapter05\test_readF.pro'
    2. % Compiled module: TEST_READF.
    3. >> ROUTINE_FILEPATH('TEST_READF')
    4. D:\Code\IDL\IDL_GUI\源码\chapter05\test_readF.pro

            注:在可以利用File_dirname()函数和File_basename()函数,获取文件路径和文件名。

     2.5.4 字符串比较

            字符串比较函数Strcmp(),可以比较两个字符串时候一样,

    语法:Result = STRCMP( String1, String2 [, N], /FOLD_CASE )

    参数N表示只比较前N个字符,关键字FOLD_CASE表示区分大小写

    1. >>a = 'Hlz'
    2. >>b ='hlz'
    3. >>c = 'Hlz-fox'
    4. >>print,Strcmp(a,b,/Fold_case) ; 是否区分大小写,默认不区分
    5. 1
    6. >>print,Strcmp(a,b,Fold_case=0) ; 区分大小写
    7. 0
    8. >>print,Strcmp(a,c) ; 不加参数N
    9. 0
    10. >>print,Strcmp(a,c,2) ; 只比较前2个字符
    11. 1

    2.5.5 总结

            以下是字符串处理历程(来源:官方文档)

            FILE_BASENAME - 返回文件路径的基本名称。

            FILE_DIRNAME - 返回文件路径的目录名

            I18N_MULTIBYTETOUTF8 - 将多字节转换为 UTF8。

            I18N_MULTIBYTETOWIDECHAR - 将多字节转换为 UTF-16、宽字符 (Unicode)。

            I18N_UTF8TOMULTIBYTE - 将 UTF-8 转换为多字节。

            I18N_WIDECHARTOMULTIBYTE - 将 UTF-16、宽字符 (Unicode) 转换为多字节。

            IDL_BASE64 - 在字节数组和 MIME Base64 编码的标量字符串之间转换。

            READS - 从字符串变量执行格式化的输入/输出。

            STRCMP - 比较两个字符串

            STRCOMPRESS - 从字符串中删除空格

            STREGEX - 执行正则表达式匹配

            STRING - 将参数转换为字符串类型

            STRJOIN - 将字符串标量或数组折叠成合并字符串

            STRLEN - 返回字符串的长度

            STRLOWCASE - 将字符串转换为小写

            STRMATCH - 将搜索字符串与输入字符串表达式进行比较。

            STRMID - 从字符串中提取子字符串

            STRPOS - 在字符串中查找第一次出现的子字符串

            STRPUT - 将一个字符串的内容插入另一个字符串

            STRSPLIT - 根据指定的模式将其输入字符串参数拆分为单独的子字符串

            STRTRIM - 从字符串中删除前导和/或尾随空格

            STRUPCASE - 将字符串转换为大写

    3. 特殊字符

    3.1 包含引号的字符转

            字符串中包含引号,则最后用另一种引号创建。

    例如:打印:I'm Hlz, 打印:你真"棒"!       

    1. >>print,"I'm Hlz"
    2. I'm Hlz
    3. >>print,'I'm Hlz'
    4. print,'I'm Hlz'
    5. ^
    6. % Syntax error.
    7. 你真"棒"
    8. >>print,"你真""! " 
    9. print,"你真""! " 
    10. ^
    11. % Syntax error.
    12. print,"你真""! " 
    13. ^
    14. % Illegal character in program text. 

             如果字符串中既有单引号、又有双引号的字符串该如何处理?可以分开输入,在合并!

    1. >>print,"I'm Hlz"+'你真"棒"!'
    2. I'm Hlz你真"棒"!

    3.2 特殊字符

            略……(下次补充)        

    注:后续将针对字符串,整理相关的函数

    不足之处,敬请斧正!

    路漫漫其修远兮,吾将上下而求索

  • 相关阅读:
    接口自动化测试实践指导(下):接口自动化测试断言设置思路
    Beanshell的未授权利用
    讲讲springboot的@Async
    【微积分】算法数学基础之微积分
    DevOps-Jenkins-CI持续集成操作
    盘点十大免费低/无代码开发软件,数字化转型看这里
    【Linux常用命令】
    计算机毕业设计Java重工教师职称管理系统(源码+系统+mysql数据库+lw文档)
    Java中的volatile
    JAVA CSS类
  • 原文地址:https://blog.csdn.net/weixin_41649786/article/details/126097194