IDL 字符串


1.創建字符串

  字符串和字符串數組通過賦值或函數方式來創建。在IDL字符串用" "或' '括起來表示。

IDL> s1="abcdef"
IDL> help,s1
S1              STRING    = 'abcdef'
IDL> s2=strarr(4)
IDL> help,s2
S2              STRING    = Array[4]

  以"為首的字符串的首字符不能為數字,因為以"開頭的數字串代表一個8進制數,如"11表示8進制的11,即10進制的9

IDL> help,"11
<Expression>    INT       =        9

  當字符串中需要包含'或"時,可以再字符串里面寫兩個同樣的'或"符號,示例代碼如下

IDL> s1="abcdef"
IDL> help,s1
S1              STRING    = 'abcdef'
IDL> s2="a'b'c"
IDL> help,s2
S2              STRING    = 'a'b'c'
IDL> s3='ab"c'
IDL> help,s3
S3              STRING    = 'ab"c'
IDL> s4="ab""""c"
IDL> help,s4
S4              STRING    = 'ab""c'

2.字符串連接

  直接用加號“+”

IDL> s1="abc"
IDL> s2="def"
IDL> s3=s1+s2
IDL> help,s3
S3              STRING    = 'abcdef'

3.字符串轉換

  字符串可以直接轉換為字節類型(byte),而整型(int)、浮點型(float)等其他類型不允許直接轉換,需要先將字符串轉換為子姐姐類型在轉換為其他類型;逆變換也是如此。

IDL> s1="abc"
IDL> print,byte(s1)
  97  98  99
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      99
IDL> print,string([97,98,99])
      97       98       99
IDL> print,string(byte([97,98,99]))
abc

4.處理函數

  字符串操作都是通過字符串處理函數來實現的

(1) 字符串截取

  利用字符串操作函數提取采集時間

IDL> ;文件完整路徑
IDL> file='c:\temp\AMOD0320040707140331.hdf'
IDL> ;獲取文件完整路徑的文件名
IDL> basename=file_baseName(file)
IDL> print,basename
AMOD0320040707140331
IDL> ;獲取文件名中的時間部分字符
IDL> print,strMid(basename,6,8)
20040707

  基於文件名計算文件名的擴展名的代碼

IDL> file='c:\temp\AMOD0320040707140331.hdf'
IDL> basename=file_basename(file)
IDL> ;查找文件名中“.”的位置
IDL> pPos=STRPOS(baseName,".",/REVERSE_SEARCH)
IDL> ;如存在“.”則輸出大寫格式的擴展名
IDL> if pPos [0] -1 then print,StrUpCase(StrMid(basename,pPos[0]+1,3))
HDF

(2) 多字串截取

IDL> str='abcdefghijklmnopqrst'
IDL> ;數組截取可以彩玉下標數組的方式
IDL> str1=strmid(str,indgen(4)*5,5)
IDL> help,srt1
SRT1            UNDEFINED = <Undefined>
IDL> print,str1
abcde fghij klmno pqrst

(3) 空格去除

  函數有StrTrim和StrCompress,示例代碼如下:

IDL> ;定義整型變量
IDL> var=41
IDL> ;轉換為字符串   
IDL> str=string(var)
IDL> ;轉換后前面包含空格
IDL> help,str
STR             STRING    = '      41'
IDL> ;定義前后都包含空格的字符串
IDL> str="   6   "
IDL> ;StrTrim函數去除前后空格,參數1只去除前面的空格,參數2去除前后的空格
IDL> help,strtrim(str,2)
<Expression>    STRING    = '6'
IDL> ;字符串前后和中間均有空格
IDL> str="  5 6 7  "
IDL> ;函數StrCompress去除字符串中所有的空格
IDL> help,StrCompress(str,/Remove_all)
<Expression>    STRING    = '567'

(4) 數組處理

  利用字符串操作函數求出整型數組中以2開頭的子數組

IDL> arr=[12,23,45,65,25]
IDL> print,arr[where(strmatch(strtrim(arr,2),'2*') eq 1)]
      23      25

5.特殊字符

無法打印輸出的特殊字符

特殊字符對照表
ASCII字符 數據值(字節型)
Bell 7B
后退 8B
水平TAB 9B
換行 10B
數值TAB 11B
走紙 12B
回車 13B
ESC(取消) 27B


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM