2014-09-07 3 views
1

Мне было интересно, если/как вы можете прочитать определенную строку в vb.net с помощью system.io.streamreader.Как выбрать конкретную строку для чтения в vb.net?

Dim streamreader as system.io.streamreader 
streamreader.selectline(linenumber as int).read 
streamreader.close() 

Это возможно или есть аналогичная функция для этого?

+0

не существует, читать файл через **, а ** и поставить счетчик – InferOn

+3

текстовые файлы * потоки *, вы не можете знать, где линия начинается и заканчивается иначе, чем читать их один по одному, пока не достигнете нужной вам линии. Очень вероятно, что вы не должны хранить данные в текстовых файлах, когда найдете, что вам нужно начинать писать такой код. –

ответ

1

Я бы использовал File.ReadAllLines для чтения строк в массиве, а затем просто использовал массив для выбора строки.

Dim allLines As String() = File.ReadAllLines(filePath) 
Dim lineTwo As String = allLines(1) '0-based index 

ReadAllLines Обратите внимание, что будет читать весь текстовый файл в память, но я предполагаю, что это не проблема, потому что, если это так, то я предлагаю вам принять альтернативный подход к попытке перейти к конкретной строке.

+0

Спасибо за помощь. Я отдам его. –

0

ReadLines довольно быстро, так как он не загружает все в памяти. Он возвращает IEnumerable<string>, которые позволяют легко перейти к строке. Возьмите этот 5GB файл:

var data = new string('A', 1022); 
using (var writer = new StreamWriter(@"d:\text.txt")) 
{ 
    for (int i = 1; i <= 1024 * 1024 * 5; i++) 
    { 
     writer.WriteLine("{0} {1}", i, data); 
    } 
} 

var watch = Stopwatch.StartNew(); 
var line = File.ReadLines(@"d:\text.txt").Skip(704320).Take(1).FirstOrDefault(); 
watch.Stop(); 

Console.WriteLine("Elapsed time: {0}", watch.Elapsed); // Elapsed time: 00:00:02.0507396 
Console.WriteLine(line); // 704320 AAAAAA... 
Console.ReadLine(); 
Смежные вопросы