UTF-8 コードでグレップと置換に失敗するNo.03681
kyau さん 03/04/08 12:10
 
こんにちは hee と申します。

UTF-8 コードの xml ファイルを急に扱わなくてはならなくなりました。
それで以下のような問題が発生しました。

●グレップ結果が文字化けする(グレップでは文字コードの自動判別がおこなわれな
い??)、グレップ結果を Shift-Jis で保存し、改めて文字コードを指定して開く
と化けは解消するのですが、ただしく検索されていない

●また、UTF-8 の XML ファイルを文字コードを指定して開き、
正規表現で
置換前:[0-9]\f<td>
置換後:\0◎\1
のように指定して、たとえば「abc1<td>」などを「abc1◎<td>」
検索置換を行うと、うまく行く箇所と失敗する箇所があります。さらに、失敗した箇
所では、「abc1◎<td>」とはならずに、「abc◎<td>」のように数字が勝手に削除さ
れてしまい、困っています。正規表現に限らず、もっと簡単な置換でも検索漏れが発
生してしまいます。

このファイル、秀丸で文字コードを指定して開くと、一行が非常に長く、
それが原因かどうかは分からないのですが、検索速度自体もものすごく遅くなります。
たった1000行程度の置換に1分はかかっています。

このあたりのことを解決する術はあるのでしょうか?

#マクロとは直接関係がないので、ここに投稿すべきではなかったら
すみません。

[ ]
RE:03681 UTF-8 コードでグレップと置換にNo.03682
ENCODINGSHIFTJIS さん 03/04/08 16:16
 
>単純な解決策はXML専用のエディタを使う、です。

長大な行はトラブルが起きます、改行を入れます。
レコード単位にとか、事前にインデントを入れたり
はずしたりします。行指向のソフトを使う限りそうです。
余分な空白を避けたいなら

>ddddddd<T1
>aaaaaa</T1
>dddddd<T2
>deeeedkl</T2
>
のような改行を適度に入れます。
??流の改行(名前が付いていたハズ)

長い行では、強調表示の正規表現に注意します。
aaaaaab  タイプの強調をすると、計算量のオーダーN^2
で遅くなりやすいです。

[ ]
RE:03681 UTF-8 コードでグレップと置換にNo.03683
ひろ さん 03/04/08 18:01
 
 kyau さん今日は、ひろです。
> ●グレップ結果が文字化けする(グレップでは文字コードの自動判別がおこなわれな
> い??)、グレップ結果を Shift-Jis で保存し、改めて文字コードを指定して開く
> と化けは解消するのですが、ただしく検索されていない
 grep で文字コードの自動認識も、「動作環境」→「編集」→「文字コード
の自動認識をする」および [詳細] によって変わってきます。

> ●また、UTF-8 の XML ファイルを文字コードを指定して開き、
> 正規表現で
> 置換前:[0-9]\f<td>
> 置換後:\0◎\1
> のように指定して、たとえば「abc1<td>」などを「abc1◎<td>」
> 検索置換を行うと、うまく行く箇所と失敗する箇所があります。
 単純な例では再現しませんでした。
 Ver.3.09 で一行が長い場合の置換の問題が解消されているので、それ以前
のヴァージョンをお使いなら
> 秀丸で文字コードを指定して開くと、一行が非常に長く、
が原因かもしれません。

 P.S ここはマクロの会議室なので、秀丸一般の話題は、
http://www.maruo.co.jp/hidesoft/2/
http://www.maruo.co.jp/turukame/3/
が適当かと思います。また環境を書いて頂いた方が解決が早くなると思います。

[ ]
RE:03683 UTF-8 コードでグレップと置換にNo.03684
kyau さん 03/04/08 20:10
 
ひろさん、ENCODINGSHIFTJIS さん

貴重な情報を教えていただきありがとうございました。
グレップ結果での文字化けは、
「動作環境」→「編集」→「文字コード
の自動認識をする」
で解消されました。

意図どおりに置換されない問題と置換速度の問題は
秀丸のバージョンは、3.15 と 3.19 で試した結果でした。
やはり、長大な文字を1行に収めているというファイルの性質
によるもののような気がしています。

>長大な行はトラブルが起きます、
>長い行では、強調表示の正規表現に注意します。
>aaaaaab  タイプの強調をすると、計算量のオーダーN^2
>で遅くなりやすいです。

実際のファイルは客先から
仕事で依頼されたものなので開示できないのですが、
そういうこともあるんですね。

ありがとうございました。

[ ]
RE:03684 UTF-8 コードでグレップと置換にNo.03686
ひろ さん 03/04/09 00:40
 
 kyau さん今日は、ひろです。
> 秀丸のバージョンは、3.15 と 3.19 で試した結果でした。
> やはり、長大な文字を1行に収めているというファイルの性質
> によるもののような気がしています。
 そうですか。それでは 1 行が長い場合の不具合がまだ残っているかもしれ
ませんね。

> 実際のファイルは客先から
> 仕事で依頼されたものなので開示できないのですが、
 開示可能なファイルなら、担当さんに直接送れば何変わったかもしれません
が、致し方ないですね。

[ ]