2011-09-08 3 views
0

Как читать строки в другой строке, где между Starting Index и первым попавшимся Ending IndexЧтение конкретной части контента файла

У меня есть один гигантский файл, который содержит информацию для каждых клиентов, и они отделенны информацией клиентов с пусковым и Ending Indexes, и мне нужно получить конкретную информацию о клиенте для отображения.

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) 

Ничего особенного. Но он читает файл и помещает этот гигантский файл в переменную sFileContent. Я не уверен, насколько эффективен этот способ (кажется хуже, чем MemoryStream).

Индексные строки могут быть более 1 символа.

Edit:

Более подробная информация о файле, файл содержит только один гигантские линии и линию содержит всю информацию. Я не могу касаться этого файла, кроме как читать его, так как он имеет действительно конфиденциальные данные.

Я ищу строку между начальным индексом и индексом первого встречного.

+0

Вы говорите, что это "гигантский" файл - как большой? Насколько важна производительность здесь? Действительно ли это строка «Начальный индекс», которую вы ищете? Является ли файл разбитым на строки или что-то еще полезное? –

+0

Обратитесь к моему правлению, @Jon Skeet. Спасибо – Tarik

+0

[MemoryMappedFile] (http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile.aspx#Y2639) может быть вариант, особенно если у вас есть симпатичный хорошая идея, где в файле вы будете искать данные. – vcsjones

ответ

3

Вы должны прочитать файл строка за строкой:

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

Это всего лишь одна строка, одна гигантская линия, содержащая все. – Tarik

+0

Тогда это полностью зависит от того, как выглядит файл. – SLaks

1

DONT READ ВЕСЬ ЛИНИЯ

Создать двоичный считыватель/Text и вызывается метод чтения с индексом начала и конца. Если файл огромен, то оптимизируйте его с помощью бинарного считывателя или что-то в этом роде.

С - 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

Смежные вопросы