grep結果の仕様についてNo.28747
緒方聡 さん 10/08/05 20:23
 
お世話になっています。

grep 結果の仕様について確認させてください。

私の方で把握している仕様は以下の通りです。

- 長い行を結果として取り込む場合、2048 バイトぐらいで切れる
- その際結果が入るように取り込まれる
- 追加の条件を設定すると、2048 バイトの制限がなくなる場合がある

上記で確認したいのは「2048 バイトぐらい」という部分です。

いろいろな文字コードのファイルに対して grep の検索結果を確認
したところ、どうも「2048 バイト」でも「2048 文字」でもないようで
どうやら固定長フォントで「2048 カラム」のような感じがします。

プログラム的には「Shift_JIS 換算して 2048 バイト」というのが
もっとも近いような気がしますが、この場合 Shift_JIS にない文字の
場合、どのように計算すればよいのかわかりません。

上記についてご教示いただけないでしょうか。

[ ]
RE:28747 grep結果の仕様についてNo.28755
秀丸担当 さん 10/08/06 11:36
 

>プログラム的には「Shift_JIS 換算して 2048 バイト」というのが
>もっとも近いような気がしますが、この場合 Shift_JIS にない文字の
>場合、どのように計算すればよいのかわかりません。

grep結果の挙動はおっしゃる通りになっていると思います。
Shift-JIS換算して、Shift-JISに無い文字は、内部コードとして4バイトとって
いて4バイトぶんとして計算していただけるといいと思います。

[ ]
RE:28755 grep結果の仕様についてNo.28757
緒方聡 さん 10/08/06 13:55
 
>grep結果の挙動はおっしゃる通りになっていると思います。
>Shift-JIS換算して、Shift-JISに無い文字は、内部コードとして4バイトとって
>いて4バイトぶんとして計算していただけるといいと思います。

正確には CP932 だと思ってよいでしょうか。



ちょっと実験してみて「あれっ」と思った点を報告します。
秀丸は 8.01 です。

1. UTF-8, BOM なしでファイルを作成
2. 「λ」を入力して保存
3. 現在の内容に対してgrepで「λ」で検索(ヒットしない)
4. 現在の内容に対して「了」で検索(ヒットする)

どうも検索時に EUC-JP だと思って検索しているようです。
保存されているファイルに対して grep する場合は、BOM がないので
仕方がないかなと思いますが、現在の内容であれば、文字コードが
事前にわかっているので、上記 3 のステップでヒットさせることが
できるのではないかな、と思います。


ちなみにλの Unicode のコードポイントは \u03BB です。

[ ]
RE:28757 grep結果の仕様についてNo.28759
秀丸担当 さん 10/08/06 14:36
 

>正確には CP932 だと思ってよいでしょうか。

はい。Shift-JIS=コードページ932ということで、そうです。

>どうも検索時に EUC-JP だと思って検索しているようです。
>保存されているファイルに対して grep する場合は、BOM がないので
>仕方がないかなと思いますが、現在の内容であれば、文字コードが
>事前にわかっているので、上記 3 のステップでヒットさせることが
>できるのではないかな、と思います。

(現在の内容)でgrepする場合は、ファイルが更新状態でなければテンポラリファ
イルを作成せずに直接ファイルを参照して、結果的にファイル名1つを指定して
grepをするのと同じ状態になっていました。
ファイルが更新されていればテンポラリファイルを作成して成功しました。
おっしゃるとおりエンコードの種類は事前に分かっているので、こういう場合で
もうまくできるように修正させていただきます。V8.02β2で修正します。

[ ]