Как я читаю указанную строку в текстовом файле?

CSS Игнорирования, так как это даст семантическое значение, когда действительно охватит, обеспечивают дополнительное семантическое значение, нарубив предложение или строку слов?

CSS Игнорирования (и другая неразметка HTML), никогда. < span > только цель в жизни состоит в том, чтобы нести разметку, которую Вы не можете выразить в HTML. Разметка, такая как < span style="dropCap" > который не имеет эквивалента в HTML, но существовал в публикации печати в течение сотен лет, и к которому всегда относятся всего один символ - первая буква объекта (статья, безотносительно), не вызывая разрыв слова (или никакое большее повреждение).

кажется, что во всех случаях, другие элементы лучше подходят для добавления семантического значения, делая промежуток чисто элементом макета. Действительно ли это верно?

Да и нет. Единственное действительное значение < span > это, это семантически нейтрально. Таким образом, в отличие от этого, например, < p > это ничего не делает, что Вы могли бы хотеть иметь его не, делают, когда Вы используете его для переноса другой разметки. И существуют времена, как < span style="dropCap" > выше, когда Вы не хотите никаких других эффектов.

53
задан Filburt 3 April 2013 в 00:57
поделиться

8 ответов

Редактировать .NET 4.0

Начиная с .NET 4.0, можно получить доступ к одной строке файла напрямую . Например, для доступа к строке 15:

string line = File.ReadLines(FileName).Skip(14).Take(1).First();

Это вернет только требуемую строку


Поскольку вы не можете предсказать местоположение (а?) I-й строки в файле, вам придется прочитать все предыдущие строки тоже. Если номер строки небольшой, это может быть более эффективным, чем метод ReadAllLines .

string GetLine(string fileName, int line)
{
   using (var sr = new StreamReader(fileName)) {
       for (int i = 1; i < line; i++)
          sr.ReadLine();
       return sr.ReadLine();
   }
}
97
ответ дан 7 November 2019 в 08:31
поделиться

Вы можете читать строка за строкой, поэтому вам не нужно читать все сразу (возможно, вообще)

int i=0
while(!stream.eof() && i!=lineNum)
    stream.readLine()
    i++
line = stream.readLine()
0
ответ дан 7 November 2019 в 08:31
поделиться

Если каждая строка имеет фиксированную длину, вы можете открыть поток вокруг нее, искать (байтов на строку) * n в файле и читать свою строку оттуда.

using( Stream stream = File.Open(fileName, FileMode.Open) )
{
    stream.Seek(bytesPerLine * (myLine - 1), SeekOrigin.Begin);
    using( StreamReader reader = new StreamReader(stream) )
    {
        string line = reader.ReadLine();
    }
}

В качестве альтернативы вы можете просто использовать StreamReader для чтения строк, пока не найдете нужную. Этот способ медленнее, но все же является улучшением по сравнению с чтением каждой отдельной строки.

using( Stream stream = File.Open(fileName, FileMode.Open) )
{
    using( StreamReader reader = new StreamReader(fileStream) )
    {
        string line = null;
        for( int i = 0; i < myLineNumber; ++i )
        {
            line = reader.ReadLine();
        }
    }
}
12
ответ дан 7 November 2019 в 08:31
поделиться

Нет, к сожалению, нет. На необработанном уровне файлы не работают на основе номеров строк. Вместо этого они работают на основе позиции / смещения. Корневая файловая система не имеет понятия строк. Это концепция, добавленная компонентами более высокого уровня.

Таким образом, нет никакого способа сообщить операционной системе, пожалуйста, откройте файл в строке blah. Вместо этого вы должны открыть файл и пропустить подсчет новых строк, пока не пройдете указанное число. Затем сохраните следующий набор байтов в массиве до перехода к следующей новой строке.

4
ответ дан 7 November 2019 в 08:31
поделиться

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

Изменить:

Как уже упоминалось, также можно было бы искать в файле, если бы длина строк была предсказуемой. - то есть вы можете применить некоторую детерминированную функцию для преобразования номера строки в позицию файла.

3
ответ дан 7 November 2019 в 08:31
поделиться

Как сказал Мердад, вы не можете просто перейти к n-й строке, не прочитав файл. Однако вам не нужно хранить весь файл в памяти - просто отбросьте ненужные данные.

string line;
using (StreamReader sr = new StreamReader(path))
    for (int i = 0; i<15; i++)
    {
       line = sr.ReadLine();
       if (line==null) break; // there are less than 15 lines in the file
    }
2
ответ дан 7 November 2019 в 08:31
поделиться

Если все строки имеют фиксированную длину, вы можете использовать Метод поиска потока для перемещения в правильную начальную позицию.

Если строки имеют переменную длину, ваши возможности более ограничены.

Если это файл, который вы будете использовать только один раз, а затем выбросите, тогда вам лучше всего прочитать его и работать с ним в памяти.

Если это файл, который вы сохраните и будете читать из других чем запись, вы можете создать собственный индексный файл, который содержит начальные позиции каждой строки. Затем используйте этот индекс, чтобы получить позицию поиска. Процесс создания индексного файла требует больших ресурсов. Каждый раз, когда вы добавляете новую строку в файл, вам нужно будет обновить индекс,

1
ответ дан 7 November 2019 в 08:31
поделиться

Если ваш файл содержит строки разной длины, и вам нужно часто читать строки, и вам нужно быстро их прочитать, вы можете сделать индекс файла, прочитав его один раз, сохраняя позицию каждого нового line, а затем, когда вам нужно прочитать строку, вы просто просматриваете позицию строки в своем индексе, ищите там, а затем читаете строку.

Если вы добавляете новые строки в файл, вы можете просто добавить индекс новых линии, и вам не нужно все это переиндексировать. Хотя, если ваш файл изменится где-то в строке, которую вы уже проиндексировали, вам придется переиндексировать.

0
ответ дан 7 November 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: