v1.12.4 — 絞り込んだ行に、桁を合わせる
桁を揃えたまま grep できる——それが 1.11 からの看板でした。ところが絞り込んだ結果の、肝心の値が読めていませんでした。
絞り込んだら、絞り込んだ行に桁が合う
列幅は、ファイルの先頭 1000 行と末尾 1000 行から決めていました。だから、長い値が中間にしか無いファイルでは拾えません。
45MB・300 万行の CSV を CSV 表示にして ERROR で 59 行に絞ると、こうなっていました。
id │ level │ note
50000 │ ERROR │ con…
100000 │ ERROR │ con…
note の中身は connection reset by peer - retrying で 34 桁。列幅は見出しの note と、先頭・末尾に並ぶ ok だけで決まって 4 桁でした。上限の 40 桁に当たっていたわけではありません。絞り込んだ後こそ読みたい列が、絞り込んだせいで読めない状態です。
いまは、フィルタが効いている間は一致行から列幅を決め直します。上の表示はこうなります。
id │ level │ note
50000 │ ERROR │ connection reset by peer - retrying
100000 │ ERROR │ connection reset by peer - retrying
- 一致が 400 行以下(ふつうの絞り込み)は全部見て決めます。近似ですらありません。
- 一致が多いときは両端 200 行ずつで止めます。一致行はファイル全体に散らばるので 1 行ずつ引くことになり、10GB で 2000 行なら 0.419 秒、400 行なら 0.084 秒。絞り込みが確定した瞬間に払う代金なので、上限を掛けました。
- 打っている途中で一瞬 0 件になっても、列名の帯は空にしません。
- 絞り込んでから構造化表示に入ったとき、一致行の 1 本目が列名になっていたのも直しました(列名は必ず先頭行から取ります)。
フィルタを解けば、元どおりファイル全体の桁に戻ります。
小さいファイルで、画面が食い違っていた
8MB 未満のファイルで、フィルタ ON のまま構造化表示へ切り替えると、画面の 3 箇所が別のことを言っていました。
| 見るところ | 出ていたもの |
|---|---|
| 本文 | 絞り込み前の生テキスト(整形もされない) |
| 列名の帯 | 一致行の 1 本目 |
| ステータス | 絞り込み後の行数 |
順番の問題でした。整形を組んだ直後に検索バーを閉じる処理が走り、退避してあった元の全文で本文を上書きしていました。整形結果だけが消えて、帯と行数が残る。整形の前にフィルタを畳むようにしました。
小さいファイルでは、絞り込みは維持されません。 本文そのものを整形後のテキストへ差し替える作りなので、両立できません(「桁を揃えたまま grep」は 8MB 以上のファイルの機能です)。
確認したこと
配布するものと同じ .app で、両方の順番を通しています。
| 条件 | 結果 |
|---|---|
| 45MB・300 万行 CSV、構造化 → 絞り込み | 34 桁の値が全部出る |
| 同、絞り込み → 構造化 | 同じ。列名も id / level / note |
| 絞り込みを解除 | 元の桁に戻る |
| 10GB・8642 万行、5134 万件ヒット | 詰まらない(漏斗を押して 0.30 秒で戻る) |
| 4.2MB CSV、絞り込み → 構造化 | 本文・帯・行数が一致 |
616 のテストが緑。Apple Developer ID で署名し、公証を通しています——ダブルクリックで開きます(Apple Silicon / Intel 両対応・macOS 13+)。