ノート内容で不必要な部分をカットする[AppleScript][Evenrote]
前回で条件分岐ができました。
(前回の状態)
set text2 to ""
set note1 to find notes "notebook:inbox"
if not (note1 = {}) then
repeat with i in note1
set text1 to HTML content of i
set text2 to text2 & text1
end repeat
else
display dialog "検索結果はありません"
end if
が、このままの状態だとtext2の中身がえらいことになります。
※参考例
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">テスト3<div>テスト3−1</div></body></html><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">テスト1<div>テスト1−1</div></body></html><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">テスト2<div>テスト2−1</div></body></html><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">テスト4<div>テスト4−5</div><div><br /></div></body></html>
さすがにこれは扱いにくいですね。ノートの内容だけが欲しいのでxmlとかbodyとかhtmlのタグは不必要です。
が、この部分を削除するのは、なんだかいろいろ面倒そうです。その面倒そうなことがらを理解するのも時間がかかりそうです。
というわけで、ざっくり方式で行ってみます。ようは、<body></body>に挟まれた部分だけを抽出できれば言い訳です。
で、これらのノートは一定の作法で作ってあるので、形式はほぼ同じ。ということは、前後のタグに使われている文字数が同じというわけです。
というわけで力業
set text3 to ""
if not (note1 = {}) then
repeat with i in note1
set text1 to HTML content of i
set text2 to characters 306 thru -15 of text1 as text
set text3 to text3 & text2
end repeat
else
display dialog "検索結果はありません"
end if
これを実行すると、たとえば
テスト3<div>テスト3−1</div>テスト1<div>テスト1−1</div>テスト2<div>テスト2−1</div>テスト4<div>テスト4−5</div><div><br /></div>
というシンプルな結果が得られます。
追加した行
set text2 to characters 306 thru -15 of text1 as text
はtext1の306文字目からー15文字目(後ろから数えて15文字目)までをカットしてください、それをtext2に代入してください、という命令です。
characters 開始の場所(文字数) thru 終了場所(文字数) of 対象のテキスト as text
という感じですね。
characters 5 thru 10 of text1 as text
だと頭から5文字目からスタートし、10文字目までを切り取ってください、という意味になります。文字数をマイナス指定すると文章の後ろから、という意味になります。
ちなみに、as textを付けないと、リスト形式で切り取るらしいですが、今のところ使う予定はありません。
ホントは正規表現的な何かで処理すべきなのでしょうが、とりあえずは力業のまま行っておきましょう。