ジャムスタ

just another mind Style

ノート内容で不必要な部分をカットする[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を付けないと、リスト形式で切り取るらしいですが、今のところ使う予定はありません。

 

ホントは正規表現的な何かで処理すべきなのでしょうが、とりあえずは力業のまま行っておきましょう。