Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡ kdiff

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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages