私のファイル スキャン D プログラムでは、キー文字列のセットのすべてのヒットを、Grep と同様の行と列のコンテキストと共に検索するためのロジックを実装しています。
私の現在のアルゴリズムfind
は、ファイルの終わりまで呼び出すことで機能します。ヒットが見つかったら、前後に検索して、ヒット行の先頭と末尾のバイト オフセットを検出します。次に、もう一度逆方向に検索して、ファイルの先頭とヒット開始オフセットの間の改行の数を見つけます。もちろん、これは効率的でもエレガントなソリューションでもありませんが、現在は機能しており、スライスの操作方法を理解するのに役立ちました。
ここで、このコードをリファクタリングして、ファイルを 1 回だけスローする必要があり、これまでに見つかった行開始の配列を更新して操作するステート マシン (モナド) の組み合わせを使用したいと考えています ( size_t[]
)。そのような解決策は何std.algorithm
に基づいている必要がありますか? このアルゴリズムは、各タプルにヒット スライス、bol/eol スライス、および行番号が含まれるタプルの配列を出力する必要があります。