kdiff — это консольный инструмент для сравнения двух текстовых файлов построчно с поддержкой различных опций:
- чувствительность к регистру,
- сравнение отдельных диапазонов строк,
- ограничение количества различий,
- игнорирование заданных символов.
Проект реализован на C++23 с использованием паттернов:
🎨 Decorator, 🧩 Template method, 🏭 Factory method,
для расширения логики сравнения.
- 📄 Сравнение двух текстовых файлов
- 🔠 Режим case-sensitive (чувствительный к регистру)
- 🔢 Сравнение определённых диапазонов строк
- 🎯 Ограничение числа найденных различий
- ✂ Игнорирование выбранных символов
- 🌍 Поддержка локализации и широких строк (
std::wstring)
Требования:
- ⚙️ CMake ≥ 3.16
- 🖥️ Компилятор с поддержкой C++23
git clone https://github.com/elized12/kdiff.git
cd kdiff
mkdir build && cd build
cmake ..
cmake --build .После сборки исполняемый файл будет доступен в ./build/.
kdiff [OPTIONS] <file1> <file2>| Опция | Описание |
|---|---|
--case-sensitive |
Включает чувствительное к регистру сравнение |
--ranges=START1:END1,START2:END2 |
Сравнение только указанных диапазонов строк |
--count-diff=N |
Возвращает только первые N различий |
--ignore-symbol=CHARS |
Игнорирует указанные символы при сравнении |
Сравнить два файла:
kdiff file1.txt file2.txtСравнение с учётом регистра:
kdiff --case-sensitive file1.txt file2.txtСравнение только строк 1–10:
kdiff --ranges=1:10,1:10 file1.txt file2.txtВывести только первые 5 различий:
kdiff --count-diff=5 file1.txt file2.txtИгнорировать пробелы и запятые при сравнении:
kdiff --ignore-symbol=" ,"IDiffer— интерфейс сравнения файловLineDiffer— базовая реализация построчного сравнения- Декораторы:
CaseSensitiveDecorator— чувствительность к региструRangeDecorator— ограничение диапазона строкIgnoringSymbolDecorator— игнорирование символов
LineDifferFactory— фабрика, собирающая пайплайн из декораторовDiffRender— отрисовка различий в консоль
В основе сравнения файлов в kdiff лежит алгоритм Майерса (Myers' diff algorithm) — эффективный алгоритм для нахождения минимальной правки между двумя последовательностями.
Собранный бинарник можно установить системно с помощью CMake:
mkdir build
cd build
cmake ..
sudo make installПосле установки бинарник и файлы будут размещены в:
- Исполняемый файл: /usr/local/bin/kdiff
- Bash completion: /usr/local/etc/bash_completion.d/kdiff