06)AppleScript's text item delimitersを使って検索置換

| コメント(0)

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
Comments are nofollow setting

コメントする

エントリー一覧

OpenID対応しています OpenIDについて
Powered by Movable Type 8.0.2
漢字イラストロジック-脳トレ京
FREE ONLINE SUDOKU