Построчная обработка файла

97
26 ноября 2019, 18:20

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

([StreamReaderObj].ReadLine() - возвращает строку не полностью (без символов конца строки), File.ReadAllText and etc. - память)

upd: Мне важно знать какой у конкретной строки перенос(\r\n or \n)

Answer 1

Нашел код в интернете который расширяет бинари ридер и немного его изменил под нужды автора вопроса:

public static class BinaryReaderExtension
{
    public static String ReadLine(this BinaryReader reader)
    {
        var result = new StringBuilder();
        bool foundEndOfLine = false;
        char ch;
        while (!foundEndOfLine)
        {
            try
            {
                ch = reader.ReadChar();
            }
            catch (EndOfStreamException ex)
            {
                if (result.Length == 0) return null;
                else break;
            }
            result.Append(ch);
            switch (ch)
            {
                case '\r':
                    if (reader.PeekChar() == '\n') reader.ReadChar();
                    foundEndOfLine = true;
                    break;
                case '\n':
                    foundEndOfLine = true;
                    break;
            }
        }
        return result.ToString();
    }
}

Изменения я не тестировал, так что может что-то пойти не так...)

Но, возможно, код и полностью рабочий.

READ ALSO
Правильное составление запроса insert into в c#

Правильное составление запроса insert into в c#

Нужно дописать запрос insert into в c#Есть два текст бокс и бд access

99
Как создать базу данных mdf из кода?

Как создать базу данных mdf из кода?

Как создать базу данных mdf из кода?

128
Как подключить frontend к backend?

Как подключить frontend к backend?

Как подключить frontend к backend?

118