2011-10-20 17 views
0

テキストファイルを読み込んで特定のフレーズの最後のインスタンスを見つけ、そのポイントから最後までファイルを読み込むための良い方法を見つけようとしています。特定の場所からEOFにテキストファイルを読み取るC#

sometext1... 
sometext2... 
[new] 
sometext3... 
[new] 
sometext4... 
sometext5... 
[new] 
sometext6... 
sometext7... 

は私が返さ旺旺簡素化

例は

[new] 
sometext6... 
sometext7... 

を書かれた最後の部分で、私はこれを行うための方法を考えることができますが、私は非常に効率的な方法があると確信しています。 「[new]」の最後のインデックスを見つけてそこから読み取る必要があります。

+2

は、あなたがこの問題を解決するために書き込もうとしている任意のコードを示すことができ – msarchet

+0

方法大きなファイルですか?どのくらい速くなければなりませんか?フレーズは常に1行だけですか? – svick

+0

以下のJonさんのsanwserは、私の必要と同じように機能しました。 –

答えて

3

と仮定:

  1. は、[新しい]、独自の行に常にあります。
  2. いずれの行も大量です。
  3. 各チャンクはかなり小さい(それ自体に大きなメモリ負担ではない)。
  4. ファイルが非常に大きい可能性があるため、全体をメモリに読み込む必要はありません。

次に、私は次のことを行います。最初の3つの仮定を変更し、それがトリッキー取得、第四を変更し、私は怠惰になるだろうとばかりに全部を読み込む:

​​
+0

ありがとうございました。その本当のシンプルなテキストファイル(ロギング)は、最後のエントリを表示したいだけです。ありがとう。 –

1

ファイルストリームを開いてTextReaderにラップし、FileStreamインスタンスのPositionプロパティの値を保存できます。 [新しい]トークンの位置を保存することができます。

3
var text = File.ReadAllText(theFile); 
var tail = text.SubString(text.LastIndexOf("[New]")); 
+0

これは近いですが、インデックスは1行目のみでした。改行文字と戻り文字を処理しませんでした。 –

関連する問題