Как получить определенную строку от строки в C#?

Я имею строку в C# и хотел бы получить текст от определенной строки, сказать 65. И если бы файл не имеет такого количества строк, я хотел бы добраться "". Как сделать это?

8
задан Tomasz Smykowski 9 April 2010 в 09:43
поделиться

7 ответов

Быстро и просто, предполагая, что \r\n или \n - это ваша последовательность новых строк

string GetLine(string text, int lineNo)
{
  string[] lines = text.Replace("\r","").Split('\n');
  return lines.Length >= lineNo ? lines[lineNo-1] : null;
}
17
ответ дан 5 December 2019 в 05:25
поделиться

theString. Split ("\ n" .ToCharArray ()) [64]

0
ответ дан 5 December 2019 в 05:25
поделиться

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

0
ответ дан 5 December 2019 в 05:25
поделиться

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

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

using (var reader = new StreamReader(File.OpenRead("example.txt")))
{
    reader.ReadLine();
}
2
ответ дан 5 December 2019 в 05:25
поделиться

Вы можете использовать System.IO.StringReader над вашей строкой. Затем вы могли бы использовать ReadLine(), пока не дойдете до нужной строки или пока не закончится строка.

Поскольку все строки могут иметь разную длину, не существует быстрого перехода непосредственно к строке 65.

Когда вы Split() строку, вы дублируете ее, что также удваивает потребление памяти.

4
ответ дан 5 December 2019 в 05:25
поделиться
private static string ReadLine(string text, int lineNumber)
{
    var reader = new StringReader(text);

    string line;
    int currentLineNumber = 0;

    do
    {
        currentLineNumber += 1;
        line = reader.ReadLine();
    }
    while (line != null && currentLineNumber < lineNumber);

    return (currentLineNumber == lineNumber) ? line :
                                               string.Empty;
}
6
ответ дан 5 December 2019 в 05:25
поделиться

Что вы можете сделать, так это разделить строку на основе символа новой строки.

string[] strLines = yourString.split(Environment.NewLine);
if(strLines.Length > lineNumber)
{
    return strLines[lineNumber];
}
2
ответ дан 5 December 2019 в 05:25
поделиться
Другие вопросы по тегам:

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