AppleScript's text item delimitersはAppleScript内部の区切り文字の設定です。例えば区切り文字を","にして"あいう,かきく,さしす"という文字列をリストに型変換すると{"あいう","かきく","さしす"}というリストになります。コンマ区切りの文字を読み込みリストにするのに大変便利です。
区切り文字を"%"に変更してリストを文字列に型変換すると区切り文字をつかってリストがつながります。先ほどのリストは"あいう%かきく%さしす"になります。これを利用してやれば検索置換が出来ます。
set myStr to "あいう,かきく,さしす" set OriginalDelimiters to AppleScript's text item delimiters --元々の区切り文字を保存しておく。決まり事として必ず使う set findStr to "," --検索文字set repStr to "%" --置換文字 set AppleScript's text item delimiters to {findStr}--区切り文字を","にする set myStr to text items of myStr--","区切りでリストにする set AppleScript's text item delimiters to {repStr}--区切り文字を"%"にする set myStr to myStr as string--"%"区切りでテキストにする set AppleScript's text item delimiters to OriginalDelimiters --もともとの区切り文字に戻しておく。これも決まり事。 display dialog myStr =>あいう%かきく%さしす
検索置換のハンドラ(関数)replaceAllです。これをスクリプトの一部に書いておいてset myStr to my replaceAll("元の文字", "検索文字", "置換文字")とすれば検索置換できます。大量に検索置換すると(もしくは特定の文字があると)文字化けする時があります。
set myStr to "あいう,かきく,さしす" set myStr to my replaceAll(myStr, ",", "%") display dialog myStr on replaceAll(motoStr, findStr, repStr) set OriginalDelimiters to AppleScript's text item delimiters set AppleScript's text item delimiters to {findStr} set motoStr to text items of motoStr set AppleScript's text item delimiters to {repStr} set motoStr to motoStr as string set AppleScript's text item delimiters to OriginalDelimiters return motoStr end replaceAll
下記ハンドラでset myCount to my countFields("元の文字", "区切り文字")で変数myCountには元の文字を 区切り文字で分割した数が入ります。
set myStr to my nthFields("元の文字", "区切り文字", アイテム数)で元の文字を 区切り文字で分割した2つめ等を取り出せます。
set myStr to "あいう,かきく,さしす" set myCount to my countFields(myStr, ",") set myStr to my nthFields(myStr, ",", 2) display dialog "合計" & (myCount as string) & "個で2つめは:" & myStr on countFields(myStr, sep) set OriginalDelimiters to AppleScript's text item delimiters set AppleScript's text item delimiters to {sep} set myStr to text items of myStr return count myStr end countFields on nthFields(myStr, sep, num) set OriginalDelimiters to AppleScript's text item delimiters set AppleScript's text item delimiters to {sep} set myStr to text items of myStr set AppleScript's text item delimiters to OriginalDelimiters return item num of myStr end nthFields
コメントする