スクリプト/いろいろな文字列操作の関数(履歴ID:645)
最終投稿者: cfm_
更新:2016/03/19 18:38:17
いろいろな文字列操作関数です。
==============注意==============
エラーチェックをしていないため、次のような使い方は控えてください。
最後にテストスクリプトがあります。使い方がよくわからない方は参考にしてください。
====================================
==============関数一覧==============
====================================
テストスクリプト
==============注意==============
エラーチェックをしていないため、次のような使い方は控えてください。
- 引数に空の文字列を渡す(""のこと)
- str_left("aa",-1)のような、正しくない使い方をする
- 関数内で呼び出している別の関数が、上に記述されていない or 存在しない
最後にテストスクリプトがあります。使い方がよくわからない方は参考にしてください。
====================================
==============関数一覧==============
文字列の長さを取得 str_len(string) 文字列の、指定位置の文字列を取得 str_mid(string,start,len) (上と同じ) str_mid2(string,from,to) 文字列の左端から指定文字数を取得 str_left(string,len) 文字列の右端から指定文字数を取得 str_right(string,len) 2つの文字列が等しいか確かめる str_equal(string1,string2) ある文字列がどこに存在するかを取得 str_instr(string1,string2) 文字列を全て置き換える str_replace(string,find,replace) 文字列が数値("-50.3"など)かどうか確かめる str_isnumeric(string) 渡した文字列を複数個つなげた文字列を取得 str_string(string,number) 文字の種類を変換(詳細はスクリプトへ) str_conv(string,conversion) 先頭の空白を削除する str_LTrim(string)
#文字列の長さを取得 def str_len(string) return getArrayLength(splitString(string,"")) end #文字列[string]の[start]字目から[length]字の文字列を取得 #[length]が0以下のとき、[start]字目以降の全ての文字列を返す #[start]が[string]内にあるときのみ、取得位置が[string]から出ていても文字がある分だけ取得。 def str_mid(string,start,len) len2=str_len(string) if start+len-1>len2 then len=len2-start+1;end if len>0 then return joinArray(sliceArray(splitString(string,""), start-1, len), "") else return joinArray(sliceArray(splitString(string,""), start-1, str_len(string)-start+1), "");end end #文字列[string]の[from]字目から[to]字目までの文字列を取得 def str_mid2(string,from,to) return str_mid(string,from,to-from+1) end #文字列[string]の左から[len]字の文字列を取得 def str_left(string,len) return joinArray(sliceArray(splitString(string,""), 0, len), "") end #文字列[string]の右から[len]字の文字列を取得 def str_right(string,len) len2=str_len(string) return joinArray(sliceArray(splitString(string,""), len2-len, len), "") end #2つの文字列が同じならtrue,異なるならfalseを返す def str_equal(string1,string2) str1=splitString(string1,"") str2=splitString(string2,"") len1=getArrayLength(str1) len2=getArrayLength(str1) b=(len1==len2) i=0 while i<len1 && b b=(str1[i]==str2[i]) i=i+1 end return b end #文字列[string1]の中に文字列[string2]があるか調べ、 #なければ0を返し、あれば一致する最も左のものが何文字目からかを返す def str_instr(string1,string2) str1=splitString(string1,"") str2=splitString(string2,"") len1 = getArrayLength(str1) len2 = getArrayLength(str2) i=0 b=0 while i<len1 && b==0 if str1[i]==str2[0] if str_equal(str_mid(string1+1,i+1,len2),string2) then b=i+1;end end i=i+1 end return b end #文字列[string]の中の文字列[find]を全て文字列[replace]に置き換える def str_replace(string,find,replace) result="" str=splitString(string,"") len1 = getArrayLength(str) len2 = str_len(find) i=0 len3=len1-len2+1 while i < len1 if i>len3 result=result+str[i] elsif str_equal(str_mid(string,i+1,len2),find) result=result + replace i=i+len2 else result=result + str[i] i=i+1 end end return result end #文字列[string]を[number]個つなげた文字列を返す def str_string(string,number) str=string num=number while num>1 str=str+string num=num-1 end return str end #文字列[string]が、数字であるか(「"-50.3"」など)どうかを返す def str_isnumeric(string) str=splitString(string,"") len=getArrayLength(str) b=true d=0 n=0 if str[0]=="-" then i=1;else i=0;end while i<len && b bd=(str[i]==".") bn=(str[i]=="0"||str[i]=="1"||str[i]=="2"||str[i]=="3"||str[i]=="4"||str[i]=="5"||str[i]=="6"||str[i]=="7"||str[i]=="8"||str[i]=="9") if bd then d=d+1;end if bn then n=n+1;end b = (d<2 && (bd||bn)) i=i+1 end if n==0 then b=false;end return b end #文字の種類を変換する(引数[conversion]による変換の種類は下のスクリプトを見てください。) def str_conv(string,conversion) b=true if conversion==0#[conversion]==0のとき:アルファベット小文字を大文字に str1=splitString("abcdefghijklmnopqrstuvwxyz", "") str2=splitString("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "") elsif conversion==1#[conversion]==1のとき:アルファベット大文字を小文字に str1=splitString("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "") str2=splitString("abcdefghijklmnopqrstuvwxyz", "") elsif conversion==2#[conversion]==2のとき:アルファベット半角を全角に str1=splitString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "") str2=splitString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "") elsif conversion==3#[conversion]==3のとき:アルファベット全角を半角に str1=splitString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "") str2=splitString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "") elsif conversion==4#[conversion]==4のとき:ひらがなをカタカナに str1=splitString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁぃぅぇぉがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゃゅょっ", "") str2=splitString("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポャュョッ", "") elsif conversion==5#[conversion]==5のとき:カタカナをひらがなに str1=splitString("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポャュョッ", "") str2=splitString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁぃぅぇぉがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゃゅょ"っ, "") elsif conversion==6#[conversion]==6のとき:ひらがな・カタカナを半角カタカナに str1=splitString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんぁぃぅぇぉがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゃゅょっアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポャュョッ", "") str2=splitString(str_string("ア,イ,ウ,エ,オ,カ,キ,ク,ケ,コ,サ,シ,ス,セ,ソ,タ,チ,ツ,テ,ト,ナ,ニ,ヌ,ネ,ノ,ハ,ヒ,フ,ヘ,ホ,マ,ミ,ム,メ,モ,ヤ,ユ,ヨ,ラ,リ,ル,レ,ロ,ワ,ヲ,ン,ァ,ィ,ゥ,ェ,ォ,ガ,ギ,グ,ゲ,ゴ,ザ,ジ,ズ,ゼ,ゾ,ダ,ヂ,ヅ,デ,ド,バ,ビ,ブ,ベ,ボ,パ,ピ,プ,ペ,ポ,ャ,ュ,ョ,ッ,",2), ",") else b=false end if b t=splitString(string,"") i=getArrayLength(t)-1 len=getArrayLength(str1) while i>-1 j=0 while j<len if t[i]==str1[j] then t[i]=str2[j];end j=j+1 end i=i-1 end end return joinArray(t,"") end #先頭の空白を削除する def str_LTrim(str) str2=splitString(str,"") i=0 n=getArrayLength(str2) loop=true while i<n&&loop if str2[i]!=" "&&str2[i]!=" " return str_mid(str,i+1,0) loop=false elsif i==n-1 return "" end i=i+1 end end
テストスクリプト
t="123456789" speak(str_mid(t,3,4))#3456と表示 speak(str_mid(t,3,0))#3456789と表示 speak(str_mid2(t,3,6))#3456と表示 speak(str_left(t,3))#123と表示 speak(str_right(t,3))#789と表示 speak("a" + str_string(" ",3)+str_string("b",5))#a bbbbbと表示 speak(str_equal("abc","abc"))#trueと表示 speak(str_equal("abc","ab3"))#falseと表示 speak(str_isnumeric("-20.6"))#trueと表示 speak(str_isnumeric("1.5.6"))#falseと表示 speak(str_isnumeric("-."))#falseと表示 speak(str_instr("122123123","123"))#4と表示 speak(str_replace(t,"23","34"))#134456789 speak(str_replace(t,"89","00"))#123456700 speak(str_conv("Abc",0))#ABCと表示 speak(str_conv("Abc",1))#abcと表示 speak(str_conv("Abc",2))#Abcと表示 speak(str_conv("Abc",3))#Abcと表示 speak(str_conv("あいウエお",4))#アイウエオと表示 speak(str_conv("あいウエお",5))#あいうえおと表示 speak(str_conv("あいウエお",6))#アイウエオと表示 speak(str_LTrim(" a bc d"))#a bc dと表示