Обоснуйте большой текстовый файл - PullRequest
0 голосов
/ 10 октября 2018

Я получил задание на C #, правильность которого будет оценивать программа.Я должен создать программу, которая получает входной текстовый файл и создает выходной текстовый файл, где весь текст оправдан некоторыми правилами.Третий параметр - максимальная ширина текста.Вот правила:

  • Только '\ n', '\ t', '' считаются пробелами ('\ r' нигде не появится)
  • Слово - это любая последовательность непробельных символов, окруженная по крайней мере одним пробельным символом (или началом / концом файла) с обеих сторон.
  • Пустая строка, строка, содержащая только пробельные символы, или последовательность такихстроки являются разделителями абзацев.Каждый абзац форматируется отдельно, а выходные абзацы всегда отделяются одной пустой строкой.Последняя строка абзаца должна заканчиваться разрывом строки, но без пустой строки после
  • Абзац должен содержать как можно больше слов (при сохранении их порядка ofc) без превышения максимальной ширины текста.Все слова должны быть отделены хотя бы одним пробелом.Если для достижения максимальной ширины текста все еще остается свободное место, оно распределяется между пробелами путем добавления пробелов.Если дополнительные пробелы не могут быть распределены равномерно, они должны быть добавлены слева.Последняя строка каждого абзаца должна быть выровнена по левому краю (все слова разделены ровно одним пробелом)
  • Без пробела между последним символом последнего слова в каждой строке и символом разрыва.
  • Если слово содержит больше символов, чем максимальная ширина текста, оно должно быть напечатано в отдельной строке.Если строка содержит только одно слово, это слово должно быть выровнено по левому краю.

Теперь мы не знаем, является ли текстовый файл очень большим или нет.Мы не уверены, что даже одна строка может уместиться в памяти.Как это должно быть сделано?Я пробовал что-то, но код ужасен, его даже не стоит показывать.Я прошел несколько тестов (с помощью тестирующей программы), но мне не удается из-за превышения лимита памяти в остальныхЯ не обязательно запрашиваю код, но простой псевдокод может помочь.

(То, что я пробовал просто: я пытался читать входной файл символьно и подсчитывать то, что у меня есть. Я сохранял то, что у меня естьпока что прочитайте строку, которая будет строкой в ​​выходном файле, и я думаю, что это неправильный подход.)

1 Ответ

0 голосов
/ 10 октября 2018

Я оставлю немного для исследования, так как это задание ...

Я бы использовал такой подход, который считывает данные порциями в буфер заранее определенного размера (размерменьше, чем предел памяти):

private void ReadInChunks()
{
    int bufferSize = 2048;
    byte[] buffer = new byte[bufferSize];

    using (FileStream fs = new FileStream(@"C:\Directory\my-file.txt", FileMode.Open))
    {
        int offset = 0;

        while (fs.Read(buffer, offset, bufferSize) > 0)
        {
            // do stuff with buffer

            offset += bufferSize;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...