FGALDC 15 /RE:18185 RE:カーソルを進めるより検索が速い  こんにちは、ikuboh さん 》 一般的にいえるのは、カーソルを進めるより検索機能を使うほうが速い、とい 》 うことですね。タグや特殊文字がある程度限定されているのであれば、正規表 》 現検索を使うとよいかもしれません。 なるほど、今回の私のマクロでは、#18184 の例に挙げたものの他には半角空白・ タブ・改行文字を考慮しているだけなので、それらの文字が出てくるまで、とい う形で検索をかけてブロックで取得すれば、カーソル移動の速度は稼げそうです ね。この場合、改行文字が出てくるまでということで行またがりにはなりません から絶対に文字ブロックになりますし、私がよく扱うHTML文の場合は小説がメイ ンであまり文字飾りとかもないので、十分速度が稼げそうですね。 一応、特殊な場合、というか、あまり特殊でもなくて実はよくあるのですが、私 の扱うことのあまり多くないパターンに、1文字ごとにタグで文字飾りをしてあ る、ということがあります。こういうときには、うまく作らなくては逆に遅くな りそうな気がしますが、うまく作れば1文字ごとにカーソルを進めるのと同じ程 度の実行速度で実現できそうな気もします。 ところで、1バイト改行文字でも2バイト改行文字でも、同じ1文字の改行文字 として扱わなければいけないのですが、これってどうすればいいのでしょうか。 "[<&\n\r\t ]" なんてやっても、どうもうまく行かないようですし。 》 別にテーブル(テキストに「検索語」<タブ>「置換語」を列記したもの)をも 》 たせて、置換処理で対処する手もあります。 》 このテーブルを1行ずつ読み込んで、全部置換で処理するわけです。 》 これはHTML→テキスト化に限らず、汎用性の高いマクロになりますね。 最初、私が参考にさせていただいた種市さんの htm2txt.def でも、別テーブルと いうわけではありませんでしたが、全置換でタグを削除するというロジックにな っていました。ところが、実はHTMLの文法上では、< と > で囲まれた中に改 行文字が入ることがありうるのです。というか、文法上は全ての改行文字は、タ グ内かそうでないかを問わず、空白文字として扱われるのです。つまり、Vzで 開くと空行10行のファイルをHTMLとしてテキスト変換すると、10バイト の空白文字の羅列になります。 (と思います。ちょっと自信なし) これに対する処置として、消せるタグを一気に消したあと、残ったタグは落穂拾 いする、という方法があります。いまいち美しくないような気がするんですが。 で、消せるだけ消した後は、全ての改行を空白文字に変換する必要があるため、 ラインバッファが超過するまで改行文字を空白に変換しつつひとつの行に連結す る、というロジックを私は追加してみました。この場合、ラインバッファが超過 するために結合できない部分がちょうどタグ内改行にぶつかってしまうとあまり 面白くないことが起こるのですが、他にいい方法も思いつきませんでした。 ただ、現実的には、あまりここでタグ内にぶつかるということはないようです。 単に確率の問題かもしれませんが。 さて、問題は、すべてのタグを単純に消したい訳ではない、ということ。 例えば、
というタグがあったら、そこでは水平線を引かせたい。 というタグがあったら、 というタグが出てくるまでの間の文 字列を取出し、その文字列の次の行にその文字列の同じ長さの '=' を表示させ たい、などなど。 これらいくつかのタグは、例外処理として扱ってもいいのですが、そうすると例 外のパターンが10も20も生じてしまうという形になってしまうのです。 ここが「HTMLタグ削除マクロ」と「HTML整形マクロ」の大きな違いです。 そして、私は、自らの手に余ることを自覚しつつ、後者に取り組んでいるのであ りました。                                 としき