Задание 1.1D

Лабораторная №1 — задание 1.1D #

Используйте шаблон проекта

Задание выполняется в репозитории, созданном из шаблона: Шаблон проекта на C# / .NET

Учитывайте Требования к коду на C#

Нужно добавить в ExampleLib/ новый метод согласно выбранному варианту задания.

Требования #

Требования:

  1. Нужно добавить функцию в класс FileUtil либо в новый класс;
  2. Нужно покрыть реализацию модульными тестами;
  3. Нельзя использовать готовые библиотечные функции, решающие аналогичную задачу.
  4. Следует использовать using для всех освобождаемых ресурсов
    • освобождаемые ресурсы реализуют интерфейс IDisposable
    • пример: FileStream

Допущения:

  • Можно читать файл целиком или построчно — для этого есть статические методы File.ReadLines(), File.ReadAllText() и другие
  • Перезаписывать файл следует в режиме FileMode.Truncate, чтобы старое содержимое файла было удалено
  • Атомарная перезапись файла не требуется — принимаем, что если при перезаписи файла возникнет ошибка, то часть содержимого будет потеряна
  • Можно не сохранять исходные концы строк — в перезаписанном файле можно использовать концы строк в стиле Unix (то есть "\n") либо менять концы строк в зависимости от операционной системы (то есть использовать константу Environment.NewLine)

Варианты #

  1. Напишите функцию void AddLineNumbers(string path), которая перезаписывает указанный текстовый файл, добавляя номера строк к каждой строке
    • Нумерация строк должна начинаться с единицы
    • После номера строки следует ставить точку, пробел и затем исходное содержимое строки
    • Например, третья строка "Привет, мир!" преобразуется в строку "3. Привет, мир!"
  2. Напишите функцию void CleanupConfigFile(string path), которая перезаписывает указанный текстовый файл, удаляя пустые и закомментированные строки
    • В файле конфигурации все комментарии начинаются с символа # и заканчиваются вместе с концом строки
    • Следует удалять: пустые строки; строки, содержащие только пробелы; строки, содержащие только пробельные символы комментарий
    • Следует оставить все строки, где кроме пробелов и комментариев есть иной текст
  3. Напишите функцию void ConcatFiles(string destination, params string[] sources), которая читает поочерёдно все файлы по путям, заданным в sources и пишет их в файл, путь которого задан в destination
    • Обратите внимание: функция использует переменный список параметров (ключевое слово params), вызывать её следует так: ConcatFiles("destination.txt", "source_1.txt", "source_2.txt")
    • Функция должна бросать исключение до открытия какого-либо файла, если параметр destination совпадает с одним из sources
    • Функция должна бросать исключение, если destination не удалось открыть на запись или один из sources не удалось открыть на чтение
  4. Напишите функцию void AlignRightAllLines(string path, int width), которая выравнивает все строки файла по правому краю путём добавления пробелов слева
    • Например, строка "Привет, мир!" длиной 12 символов при параметре width=100 должна быть дополнена слева 88 пробелами
    • Если длина строки превышает width, то строка остаётся неизменной
  5. Напишите функцию void FilterLinesBySubstring(string source, string destination, string substring), которая копирует из файла source в файл destination только строки, содержащие указанную подстроку substring
    • Проверяется только точное вхождение подстроки с учётом регистра
    • Учитывайте случай, когда source равен destination — бросайте исключение либо поддержите этот сценарий
  6. Напишите функцию void FilterDuplicateLines(string source, string destination), которая копирует строки из файла source в destination и при этом удаляет одинаковые строки
    • Можно использовать множества (структура данных HashSet<>) для определения одинаковых строк
    • Учитывайте случай, когда source равен destination — бросайте исключение либо поддержите этот сценарий