IDL 8.4 で追加された IDL_String クラスを使うことで、以前よりも文字列処理を簡単に行うことができる場合がある。
文字列中に含まれる特定の文字列を別の文字列に置換する。
str = "output file.eps"PRINT, str.Replace(' ', '-')PRINT, str.Replace('OUTPUT', 'INPUT',/FOLD_CASE) ; FOLD_CASE キーワードを指定すると大文字・小文字を区別しない正規表現(先読み・後読みには未対応)に最初にマッチした部分文字列を取り出す(stregex関数に相当)。
str = "DATA20170503.ps2"PRINT, str.Extract('[0-9]{8}')PRINT, str.Extract('([0-9]{4})([0-9]{2})([0-9]{2})', /SUBEXPR) ; SUBEXPRキーワードを指定すると、マッチした全体に加えて、括弧で囲んだグループ化した文字列も文字列型の配列で得るPRINT, str.Extract('^data[^.]*',/FOLD_CASE) ; FOLD_CASE キーワードを指定すると大文字・小文字を区別しない string関数の使い方: b=string(a, format='(i0)')とすることで整数aを文字列bに変換できる。小数のときは format='(f0.3)'とかformat='(e0.3)'とする。
string関数やprintプロシージャのformatキーワードに渡すformatコードの書き方はFORTRANの編集記述子とよく似ている。print,format='(%"a = %d, b = %s")', 10, 'abc'to_hex 関数も使える。(要ASTROLIB)Result = STRCMP( String1, String2 [, N] [, /FOLD_CASE] ) Result = STREGEX( StringExpression, RegularExpression [, /BOOLEAN | , /EXTRACT | , LENGTH=variable [, /SUBEXPR]] [, /FOLD_CASE] ) strmatchstrposstrcompress関数を使う。空白を全て削除するにはremove_allキーワードを付加する。strupcase(String)strlowcase(String)BYTE(String)STRING(['C5'XB, 'B0'XB, 'B5'XB, 'B7'XB, 'D7'XB, 'F7'XB]) (順にÅ, °, µ, ·, ×, ÷)strjoinstrsplitstrtrim(String[, Flag])strlen(String)strmid(String,Position[,Length])strput(Destination,Source[,Position])