スクリプト/いろいろな文字列操作の関数(履歴ID:645)

最終投稿者:Material 305033 1 mini 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と表示