爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9709|回复: 12

[混合编程] IDL编程学习之字符串处理函数

[复制链接]

新浪微博达人勋

发表于 2017-12-11 11:36:40 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
案例1
字符串拆分函数StrSplit,该函数可自定义分隔符,空格啦,分号啦各种都行
a=read_ascii('C:\Users\YGDY\Desktop\kickass.txt',DELIMITER=';',data_start=1)

其中,DELIMITER表示分隔符。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 16:22:21 | 显示全部楼层
案例11

如何获取文件名?我一直使用StrSplit函数进行截取,后来发现file_basename可以直接获取文件名
path='C:\Users\YGDY\Desktop\格式化控制符.xlsx'
a=strsplit(path,'\',/extract)
print,a[-1]
print,file_basename(path)

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2017-12-11 11:47:17 | 显示全部楼层
案例2把字符(串)连接,还可以在之间加自定义间隔符:

print, (STRJOIN(['a','12','bcd'], ':'))
输出:
a:12:bcd

用处猜想:
输出2017-12-11之类
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 13:34:55 | 显示全部楼层
案例3字符串中大小写转换:
IDL> StrLowCase('abcD')
abcd
IDL> StrUpCase('abcD')
ABCD


密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 13:36:56 | 显示全部楼层
案例4

求字符串长度
IDL> StrLen('aBcXYZ')
           6


密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 13:51:15 | 显示全部楼层
案例5截取字符串中的一段,从第3个元素开始截出4个元素

IDL> strmid('qwertyuiop',3,4)
rtyu



从倒数第5个元素开始,向右获取4个元素:
IDL> strmid('qwertyuiop',5,4,/REVERSE_OFFSET)
tyui

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 15:39:41 | 显示全部楼层
案例6

6.1
筛选含有某些字母(元素)的字符串
/FOLD_CASE表示不分大小写
  str = ['foot', 'Feet', 'fate', 'FAST', 'ferret', 'fort']
  print,STRMATCH(str, 'f????t', /FOLD_CASE)
  print,STRMATCH(str, 'f??t', /FOLD_CASE)
  print,STRMATCH(str, 'f?t', /FOLD_CASE)
  print,STRMATCH(str, 'f?te', /FOLD_CASE)

输出:
   0   0   0   0   1   0
   1   1   0   1   0   1
   0   0   0   0   0   0
   0   0   1   0   0   0


6.2
  str = ['foot', 'Feet', 'fate', 'FAST', 'ferret', 'fort']
  print,STRMATCH(str, 'f*t', /FOLD_CASE)
  print,STRMATCH(str, 'f*t*', /FOLD_CASE)
  print,STRMATCH(str, 'f*te', /FOLD_CASE)

输出:
   1   1   0   1   1   1
   1   1   1   1   1   1
   0   0   1   0   0   0

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 15:46:42 | 显示全部楼层
案例7

a=' q w  e   r t yuiop   '
0表示去掉尾部空格
print,strtrim(a,0)
1表示去掉头部空格
print,strtrim(a,1)
2表示去掉头尾空格
print,strtrim(a,2)
去掉所有空格
print,strcompress(a,/remove_all)

输出:
q w  e   r t yuiop
q w  e   r t yuiop   
q w  e   r t yuiop
qwertyuiop

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 15:51:50 | 显示全部楼层
案例8

strcmp函数也能比较字符串,但似乎只能从2个字符串的头进行比较,灵活性比strmatch弱
IDL> STRCMP('Moose', 'moo', 3, /FOLD_CASE)
   1
IDL> STRCMP('Moose', 'moo', 1, /FOLD_CASE)
   1
IDL> STRCMP('Moose', 'moa', 1, /FOLD_CASE)
   1
IDL> STRCMP('Moose', 'moa', 2, /FOLD_CASE)
   1
IDL> STRCMP('Moose', 'moa', 3, /FOLD_CASE)
   0

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 15:56:31 | 显示全部楼层
案例9
从一个字符串中找出完全符合后一个字符串的起始位置
IDL> STRPOS('qwertyuiop', 'tyu')
           4

IDL> STRPOS('IDL is fun', 'fun')
           7
IDL> STRPOS('IDL is fun', 'Fun')
          -1

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-11 16:03:43 | 显示全部楼层
案例10

覆盖字符串中元素
从str1中第3个元素开始,用str2覆盖几个位置;
这个功能与键盘上的insert一样,以前我打字时经常发现打进一个字,其后面的字就被覆盖掉,还以为是输入法坏掉了,后来才发现---准确得说是刚刚,也就是学会strput函数时,十分凑巧,我发现了原来是键盘使用问题!
IDL> str1='qwertyuiop'
IDL> str2='xyz'
IDL> STRput,str1, str2,3
IDL> str1
qwexyzuiop

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表