2011-09-08 11 views
0

インデックスを終了し、表示する特定の顧客情報を取得する必要があります。ファイルの内容の特定の部分を読む

Dim oFile As New FileInfo(sFileName) 
    Dim sFileContent As String = oFile.OpenText().ReadToEnd() 
    Dim iStartIndex As Integer = sFileContent.IndexOf(roNotification.StartByte) 
    Dim iEndIndex As Integer = sFileContent.IndexOf(roNotification.EndByte, iStartIndex) 
    Dim sCustomerInfo As String = sFileContent.Substring(iStartIndex + roNotification.StartByte.Length - 1, iEndIndex) 

Nothing much tho。しかし、それはファイルを読み取り、その巨大なファイルをsFileContent変数に入れます。私はこの方法がどれほど効率的であるかはわかりません(MemoryStreamよりも悪いようです)。

インデックス文字列は1文字以上にすることができます。

編集:ファイルに関する

詳細情報は、ファイルには、1つの巨大なラインが含まれており、ラインというすべての情報が含まれています。本当に機密データがあるので、それを読む以外はそのファイルに触れられません。

私は開始インデックスと最初に出会った終了インデックスの間の文字列を探しています。

Using reader = file.OpenText() 
    Dim line As String 
    While True 
     line = reader.ReadLine() 
     If ReferenceEquals(Line, Nothing) Then Exit While 

     'Parse the line and figure out what to do with it 
    End While 
End Using 

この方法では、一度にメモリ内に複数のラインを持っていることは決してないだろう:

+0

あなたはそれが "巨人" のファイルだと言いますか?ここでパフォーマンスはどれくらい重要ですか?それは本当にあなたが探している文字列 "Starting Index"ですか?ファイルが行に分割されているのか、それとも他の何かが役に立つのですか? –

+0

私の編集@Jon Skeetを参照してください。ありがとう – Tarik

+0

['MemoryMappedFile'](http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile.aspx#Y2639)は、考慮するオプションかもしれません。あなたがデータを探している場所で良いアイデア。 – vcsjones

答えて

3

あなたは、行ごとのファイルをお読みください。

+0

これは単なる1行で、すべてが入っている1つの巨大な行です。 – Tarik

+0

それはファイルがどのように見えるかに完全に依存します。 – SLaks

1

DONT READ THE WHOLE LINE

バイナリ/テキストリーダーを作成し、開始と終了の指標でreadメソッドを呼び出します。ファイルが巨大な場合は、バイナリリーダーなどで最適化してください。

から - どのように大きな - http://msdn.microsoft.com/en-us/library/9kstw824.aspx

using (StreamReader sr = new StreamReader(path)) 
     { 
      //This is an arbitrary size for this example. 
      char[] c = null; 

      while (sr.Peek() >= 0) 
      { 
       c = new char[5]; 
       sr.Read(c, 0, c.Length); 
       //The output will look odd, because 
       //only five characters are read at a time. 
       Console.WriteLine(c); 
      } 
} 
+0

ありがとうございますが、私の場合はあなたのようなソリューションにとっては本当に複雑すぎます。私はそれがより説明的なことができればいいと思うので、私は簡単な質問をして残りの部分を扱います。 – Tarik

関連する問題