Лабораторная №1 — задание 1.1D #
Используйте шаблон проекта
Задание выполняется в репозитории, созданном из шаблона: Шаблон проекта на C# / .NET
Учитывайте Требования к коду на C#
Нужно добавить в ExampleLib/ новый метод согласно выбранному варианту задания.
Требования #
Требования:
- Нужно добавить функцию в класс
FileUtilлибо в новый класс; - Нужно покрыть реализацию модульными тестами;
- Нельзя использовать готовые библиотечные функции, решающие аналогичную задачу.
- Следует использовать
usingдля всех освобождаемых ресурсов- освобождаемые ресурсы реализуют интерфейс
IDisposable - пример:
FileStream
- освобождаемые ресурсы реализуют интерфейс
Допущения:
- Можно читать файл целиком или построчно — для этого есть статические методы
File.ReadLines(),File.ReadAllText()и другие - Перезаписывать файл следует в режиме
FileMode.Truncate, чтобы старое содержимое файла было удалено - Атомарная перезапись файла не требуется — принимаем, что если при перезаписи файла возникнет ошибка, то часть содержимого будет потеряна
- Можно не сохранять исходные концы строк — в перезаписанном файле можно использовать концы строк в стиле Unix (то есть
"\n") либо менять концы строк в зависимости от операционной системы (то есть использовать константуEnvironment.NewLine)
Варианты #
- Напишите функцию
void AddLineNumbers(string path), которая перезаписывает указанный текстовый файл, добавляя номера строк к каждой строке- Нумерация строк должна начинаться с единицы
- После номера строки следует ставить точку, пробел и затем исходное содержимое строки
- Например, третья строка
"Привет, мир!"преобразуется в строку"3. Привет, мир!"
- Напишите функцию
void CleanupConfigFile(string path), которая перезаписывает указанный текстовый файл, удаляя пустые и закомментированные строки- В файле конфигурации все комментарии начинаются с символа
#и заканчиваются вместе с концом строки - Следует удалять: пустые строки; строки, содержащие только пробелы; строки, содержащие только пробельные символы комментарий
- Следует оставить все строки, где кроме пробелов и комментариев есть иной текст
- В файле конфигурации все комментарии начинаются с символа
- Напишите функцию
void ConcatFiles(string destination, params string[] sources), которая читает поочерёдно все файлы по путям, заданным в sources и пишет их в файл, путь которого задан в destination- Обратите внимание: функция использует переменный список параметров (ключевое слово
params), вызывать её следует так:ConcatFiles("destination.txt", "source_1.txt", "source_2.txt") - Функция должна бросать исключение до открытия какого-либо файла, если параметр
destinationсовпадает с одним изsources - Функция должна бросать исключение, если
destinationне удалось открыть на запись или один изsourcesне удалось открыть на чтение
- Обратите внимание: функция использует переменный список параметров (ключевое слово
- Напишите функцию
void AlignRightAllLines(string path, int width), которая выравнивает все строки файла по правому краю путём добавления пробелов слева- Например, строка
"Привет, мир!"длиной 12 символов при параметре width=100 должна быть дополнена слева 88 пробелами - Если длина строки превышает width, то строка остаётся неизменной
- Например, строка
- Напишите функцию
void FilterLinesBySubstring(string source, string destination, string substring), которая копирует из файла source в файл destination только строки, содержащие указанную подстроку substring- Проверяется только точное вхождение подстроки с учётом регистра
- Учитывайте случай, когда source равен destination — бросайте исключение либо поддержите этот сценарий
- Напишите функцию
void FilterDuplicateLines(string source, string destination), которая копирует строки из файла source в destination и при этом удаляет одинаковые строки- Можно использовать множества (структура данных
HashSet<>) для определения одинаковых строк - Учитывайте случай, когда source равен destination — бросайте исключение либо поддержите этот сценарий
- Можно использовать множества (структура данных