問題:STXおよびETX制御文字を使用して興味深い書式設定をしている非常に大きな(300MB +)テキストファイルがあります。例:大きなテキストファイルを読み取るための制御文字の検索方法は?
plain txt infoSTX<xml ..xml message data.. /xml>ETX
私は、それぞれがSTXとETX制御文字の間に封入、XMLメッセージの「ブロック」と呼ぶであろうものの何百も、そうでない場合は数千人が、あります。これらのメッセージは、単一の行ではなく、複数の行にまたがることができます。
私はファイルを解析するので、個々の解析のためにxmlブロックをそれぞれ見つけることができる必要があります。
ここでは単純なバッファリングされたストリームリーダーが動作すると仮定しますが、ファイルの最後に到達するまで、制御文字の間の各xmlブロックを引き出すために私がどこを読んでいるかを把握できる必要があります。
while (sr.Read(buffer, index, count) > 0)
{
/*
read my xml and parse, etc
*/
}
しかし、私は私のインデックスを設定しないどのようにこれらのSTXとETX制御文字を扱う際に読み取りのために(開始/終了):
は、私はこの単純な方法を使用してファイルを読むことができると思いますか?
驚くべきことに、200MBのファイルを読み込んでそれに含まれるxmlメッセージの数を報告するのに約4秒しかかかりません。この場合、225k以上です。もちろん、これらのメッセージをそれぞれ解析してデータを処理する必要がありますが、これはうまくいくようです。おそらく、多くのエラー処理やそのようなことが必要になるでしょう。他の提案は素晴らしいでしょう。 –