HTMLをテキストにNo.01344
ぐず郎 さん 00/04/27 09:04
 
Niftyを止めちゃったので
今後こちらでお世話になります。

現在、秀丸の置換を使って、HTMLファイルをテキストに整形しています。
手順は以下の通りですが、ファイルが大量にありますので、
これをマクロで処理したいのですが、マクロはどのように書けばよいの
でしょうか。

手順
1、\n → del 全ての改行をとる。
2、<p> → \nに置換 改めて改行を入れる
3、全てのタグをとる
4、全角空白をとる。
5、半角空白をとる。
6、&nbsp; → del

宜しくお願いします。

[ ]
RE:01344 HTMLをテキストにNo.01346
番頭++ さん 00/04/27 12:20
 
>手順
>1、\n → del 全ての改行をとる。
>2、<p> → \nに置換 改めて改行を入れる
>3、全てのタグをとる
>4、全角空白をとる。
>5、半角空白をとる。
>6、&nbsp; → del

//*1    a6.mac - 2000/04/27
    if( ! selecting ){  endmacro;   }   //  範囲選択して実行する。
    #x = seltopx;   #y = seltopy;
//  1、\n → del 全ての改行をとる。
    replaceallfast "\\n", "", regular, inselect;
//  2、<p> → \nに置換 改めて改行を入れる
    replaceallfast "(<p>|<P>)", "\\n", regular, inselect;
//  3、全てのタグをとる
    replaceallfast "<[^>]+>", "", regular, inselect;    //  動くかな ???    
疑問 !!!
//  searchdown "<[^>]+>", regular;  //  手抜きだね !!!
//  4、全角空白をとる。
    replaceallfast "\x81\x40", "\x20", regular, inselect;   //  全角空白 ==>
 半角空白 1 文字
//  5、半角空白をとる。
    replaceallfast "\x20[\x20]+", "\x20", regular, inselect;    //  半角空白
の数文字 ==> 半角空白 1 文字
//  6、&nbsp; → del
    replaceallfast "&nbsp|&NBSP", "", regular, inselect;
//  gofiletop;  //  ファイルの先頭
    moveto #x, #y;
endmacro;

[ ]
RE:01344 HTMLをテキストにNo.01347
ひろ さん 00/04/27 19:05
 
 ぐず郎さん今日は、ひろです。
> 現在、秀丸の置換を使って、HTMLファイルをテキストに整形しています。
 置換を使って出来ているのを macro にするなら、一つ一つの置換を列挙し
ていけばよいんですが...。
//----------------- html2txt.mac --------------------------------------
$search=searchbuffer;
#search=searchoption;
disabledraw;
replaceallfast "\\n","",regular;//改行削除
//改行に変換する必要がある tag の開始
replaceallfast "<(P|p|(B|b)(R|r)|(H|h)[1-6])[^>]*>","\\n",regular;
replaceallfast "</((T|t)(I|i)(L|l)(E|e)|(U|u|O|o)(L|l))>","\\n",regular;
replaceallfast "</((D|d)(I|i)(R|r)|(M|m)(E|e)(N|n)(U|u))>","\\n",regular;
replaceallfast "<((L|l)(I|i)|(D|d)(L|l|T|t|D|d))[^>]*>","\\n",regular;
//改行に変換する必要がある tag 終了
replaceallfast "(<[^>]+>| |\\t)","",regular;//tag、全角空白 tab の削除
//以後、特殊文字の変換
replaceallfast "&nbsp;","";
replaceallfast "&lt;","<";
replaceallfast "&gt;",">";
setsearch $search, #search;
//---------------- end macro ---------------------------------------------
でだいたい上手くいくと思います。

 ただし欧文の場合とんでもない事になるので、
> 5、半角空白をとる。
はやっていません。

[ ]
RE:01346 HTMLをテキストにNo.01348
きいろいまふらあ さん 00/04/27 21:16
 
横からきいろいまふらあです。

ひとつ疑問なのは

>    replaceallfast "<[^>]+>", "", regular, inselect;    //  動くかな ???    

タグ以外の部分に<>(どちらか一方の場合も含む)が使われていた場合が怖いかも。

あと、htmlってタグの途中で改行ってのはナシなんでしたっけ?
#覚えてない。というより、知らない。(^^;

[ ]
RE:01348 HTMLをテキストにNo.01349
ENCODINGSHIFTJIS さん 00/04/28 09:06
 
>あと、htmlってタグの途中で改行ってのはナシなんでしたっけ?
>#覚えてない。というより、知らない。(^^;

やってみればすぐわかります。 SGML XML HTML の仕様でも可能です
改行は「空白類」で 普通 半角の扱いが多い。
改行の扱い(保存する、無視する、空白にする)のは プレーンテキストの
頃からXMLの現在でも議論が止まらない。

__e__

[ ]
RE:01349 HTMLをテキストにNo.01350
きいろいまふらあ さん 00/04/28 10:15
 
>>あと、htmlってタグの途中で改行ってのはナシなんでしたっけ?
>やってみればすぐわかります。 SGML XML HTML の仕様でも可能です

確かに。
<bo
dy>
なんてのも(NN4.7では)普通に読んでくれました。

とすると"<[^>]+>"にマッチしないタグが有りうるわけですね。(^_^)

[ ]
RE:01350 HTMLをテキストにNo.01351
ENCODINGSHIFTJIS さん 00/04/28 11:51
 
><bo
>dy>
>なんてのも(NN4.7では)普通に読んでくれました。

これは本当は規格違反です、HTML でよく見かけるのは
長い属性値を改行で置いています。
 <P
     SYLTE="...............
  >
など Pは固定で STYLEをプログラムで可変発生させたなど。

__e__

[ ]
RE:01344 HTMLをテキストにNo.01352
ぐず郎 さん 00/04/28 13:23
 
番頭++さん、皆さんありがとうございます。
うまく動いています。
改めて、後刻コメントしたいと思います。
まずは、お礼まで。

[ ]
RE:01347 HTMLをテキストにNo.01353
かかし さん 00/04/28 13:47
 
かかしです、こんにちは。

> 置換を使って出来ているのを macro にするなら、一つ一つの置換を列挙し
>ていけばよいんですが...。
>//----------------- html2txt.mac --------------------------------------
>$search=searchbuffer;
>#search=searchoption;
>disabledraw;
>replaceallfast "\\n","",regular;//改行削除

たとえば、<PRE>タグに囲まれた場合はどうなるのでしょう?

#いじわる?

---かかし

[ ]
RE:01352 HTMLをテキストにNo.01354
番頭++ さん 00/04/28 17:35
 
何でもできますが、タグを取り去るツールを探したほうが賢明かも ...

//*1    b1.mac
    if( rightstr(basename,5) == ".html" || rightstr(basename,4) == ".htm" ){
        call pp_pre_tag1;
    }
endmacro;

//  <pre> </pre> の考慮 - 完璧では在りません !!!
pp_pre_tag1:
    if( updated ){  endmacro;   }   //  更新してる !!!
    replaceallfast "<\\f/?\\f(pre|PRE)>", "<\\1pre>", regular;
    replaceallfast "[^\\n]\\f<\\f/?\\fpre>", "\\0\\n<\\2pre>", regular;
    replaceallfast "<\\f/?\\fpre>\\f[^\\n]", "<\\1pre>\\n\\3", regular;
    gofiletop;
    searchdown "^<pre>", regular;
    while( result ){
        escape; down;   #x = x; #y = y; beginsel;
        searchdown "</pre>", regular;
        if( ! result ){
            escape; message "</pre> not found !!!"; endmacro;
        }
        beginsel;   moveto #x, #y;
        replaceallfast "\\n", "<p>\\n", regular, inselect;
        searchdown "^<pre>", regular;
    }
    gofiletop;
return;


//*1    b2.mac
//  3、全てのタグをとる
    if( rightstr(basename,5) == ".html" || rightstr(basename,4) == ".htm" ){
        call pp_del_tag1;
    } else {
        replaceallfast "<[^>]+>", "", regular, inselect;
        //  動くかな ???    疑問 !!!
    }
endmacro;

pp_del_tag1:    //  秀丸 依存版 !!!
    gofiletop;
    searchdown "<[^>]+>", regular;
    while( result ){
        #xs = seltopx;  #ys = seltopy;  #xe = selendx;  #ye = selendy;  escape;
        if( colorcode == 13 ){  //  HTML タグ全体部分
            moveto #xe-1, #ye;
            if( colorcode == 13 ){  //  HTML タグ全体部分
                right;  beginsel;   moveto #xs, #ys;
            //  menu str(colorcode);
                delete; escape;
            }
            left;
        }
        finddown;
    }
    gofiletop;
return;


[ ]
RE:01353 HTMLをテキストにNo.01361
ひろ さん 00/04/30 13:40
 
 かかしさん今日は、ひろです。
> たとえば、<PRE>タグに囲まれた場合はどうなるのでしょう?
 そういったのは考慮していません。

[ ]