C++ madLineCleaner
Представляю вам еще один продукт моего незамутненного светлого гения. Суть программы в том, чтобы убирать лишние пустые строки. Терпеть не могу пропуски строк в коде и вот, эта замечательная утилита решает данную проблему.
🧹 madLineCleaner — удаление пустых строк
...из вашего несчастного говнокода.
madlineCleaner.exe — это небольшая утилита для Windows, написанная на C++, которая сканирует текущую директорию и удаляет все пустые строки из файлов с расширениями .txt
и .cpp
.
🔧 Что делает программа?
- 📁 Ищет все
.txt
и.cpp
файлы в текущей папке - 🔢 Показывает пронумерованный список найденных файлов — просто выбираешь нужную цифру и жмёшь Enter
- 🧠 Удаляет строки, содержащие только пробелы или табуляции
- 💾 Сохраняет результат в новый файл
cleaned_ИМЯ_ФАЙЛА
- 🖱️ Поддерживает запуск двойным кликом в Windows (через cmd)
💻 Как скомпилировать
Если используешь MinGW (g++ для Windows), обязательно собирай со статической линковкой:
g++ -static -std=c++17 -o madWinLineCleaner madWinLineCleaner.cpp
Это создаёт полностью автономный файл .exe
, который не требует внешних DLL.
⚠️ Важно!
Если ты забудешь флаг -static
, то при запуске может появиться ошибка:
❌ Не удается продолжить выполнение кода, так как не найдена libstdc++-6.dll
В этом случае либо пересобери программу с -static
, либо положи нужные DLL (например, libstdc++-6.dll
) рядом с .exe
.
🚀 Как пользоваться
- Скомпилируй утилиту
- Положи
madlineCleaner.exe
в нужную папку с файлами - Запусти двойным кликом
- Выбери нужный файл по номеру
- Готово — очищенный файл будет создан рядом
🪟 madWinLineCleaner — версия для Windows
// File: madWinLineCleaner.cpp
// Description: Удаляет все пустые строки из .txt и .cpp файлов в текущей директории.
// Compilation (Windows, g++):
// g++ -static -std=c++17 -o madWinLineCleaner madWinLineCleaner.cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <filesystem>
#include <string>
#include <algorithm>
#include <cctype>
namespace fs = std::filesystem;
// Функция для получения списка файлов с нужными расширениями
std::vector<fs::path> getTargetFiles() {
std::vector<fs::path> files;
for (const auto& entry : fs::directory_iterator(".")) {
if (entry.is_regular_file()) {
std::string extension = entry.path().extension().string();
std::transform(extension.begin(), extension.end(), extension.begin(),
[](unsigned char c){ return std::tolower(c); });
if (extension == ".txt" || extension == ".cpp") {
files.push_back(entry.path());
}
}
}
return files;
}
// Функция для удаления всех пустых строк из файла
void removeEmptyLines(const fs::path& filepath) {
std::ifstream inputFile(filepath);
if (!inputFile.is_open()) {
std::cerr << "Error: Cannot open file " << filepath << " for reading." << std::endl;
return;
}
fs::path outputPath = "cleaned_" + filepath.filename().string();
std::ofstream outputFile(outputPath);
if (!outputFile.is_open()) {
std::cerr << "Error: Cannot create file " << outputPath << " for writing." << std::endl;
inputFile.close();
return;
}
std::string line;
size_t removedCount = 0;
while (std::getline(inputFile, line)) {
bool isEmpty = true;
for (char c : line) {
if (!std::isspace(static_cast<unsigned char>(c))) {
isEmpty = false;
break;
}
}
if (!isEmpty) {
outputFile << line << "\n";
} else {
removedCount++;
}
}
inputFile.close();
outputFile.close();
std::cout << "✅ Done! Removed " << removedCount << " empty lines." << std::endl;
std::cout << "💾Result saved to: " << outputPath << std::endl;
}
int main() {
std::cout << "=== File Cleaner - Remove ALL Empty Lines ===" << std::endl;
std::cout << "Looking for .txt and .cpp files in current directory..." << std::endl;
std::vector<fs::path> files = getTargetFiles();
if (files.empty()) {
std::cout << "No .txt or .cpp files found in current directory." << std::endl;
std::cout << "\nPress Enter to exit...";
std::cin.ignore();
std::cin.get();
return 0;
}
std::cout << "\nFound files:" << std::endl;
for (size_t i = 0; i < files.size(); i++) {
std::cout << i + 1 << ". " << files[i].filename() << std::endl;
}
std::cout << "\nEnter file number to process (0 to exit): ";
int choice;
std::cin >> choice;
if (choice == 0) {
std::cout << "Exit." << std::endl;
std::cout << "\nPress Enter to exit...";
std::cin.ignore();
std::cin.get();
return 0; } if (choice < 1 || choice > static_cast<int>(files.size())) { std::cerr << "Error: Invalid choice." << std::endl; std::cout << "\nPress Enter to exit..."; std::cin.ignore(); std::cin.get(); return 1; } fs::path selectedFile = files[choice - 1]; std::cout << "Processing file: " << selectedFile.filename() << std::endl; removeEmptyLines(selectedFile); std::cout << "\nPress Enter to exit..."; std::cin.ignore(); std::cin.get(); return 0; }
🐧 madlineCleaner — версия для Linux
// madLinuxLineCleaner.cpp // Описание: Удаляет все пустые строки из .txt и .cpp файлов в текущей директории (Linux-версия) // Сайт: https://madmentat.ru // Компиляция (Linux, g++): // g++ -static -std=c++17 -o madLinuxLineCleaner madLinuxLineCleaner.cpp #include <iostream> #include <fstream> #include <vector> #include <filesystem> #include <string> #include <algorithm> #include <cctype> namespace fs = std::filesystem; // Получение списка .txt и .cpp файлов std::vector<fs::path> getTargetFiles() { std::vector<fs::path> files; for (const auto& entry : fs::directory_iterator(".")) { if (entry.is_regular_file()) { std::string extension = entry.path().extension().string(); std::transform(extension.begin(), extension.end(), extension.begin(), [](unsigned char c){ return std::tolower(c); }); if (extension == ".txt" || extension == ".cpp") { files.push_back(entry.path()); } } } return files; } // Удаление пустых строк void removeEmptyLines(const fs::path& filepath) { std::ifstream inputFile(filepath); if (!inputFile.is_open()) { std::cerr << "Ошибка: не удалось открыть файл " << filepath << " для чтения.\n"; return; } fs::path outputPath = "cleaned_" + filepath.filename().string(); std::ofstream outputFile(outputPath); if (!outputFile.is_open()) { std::cerr << "Ошибка: не удалось создать файл " << outputPath << " для записи.\n"; inputFile.close(); return; } std::string line; size_t removedCount = 0; while (std::getline(inputFile, line)) { bool isEmpty = true; for (char c : line) { if (!std::isspace(static_cast<unsigned char>(c))) { isEmpty = false; break; } } if (!isEmpty) { outputFile << line << '\n'; } else { removedCount++; } } inputFile.close(); outputFile.close(); std::cout << "✅ Готово! Удалено пустых строк: " << removedCount << "\n"; std::cout << "💾 Результат сохранён в файл: " << outputPath << "\n"; } int main() { std::cout << "🧹 madlineCleaner (Linux)\n"; std::cout << "Ищем .txt и .cpp файлы в текущей директории...\n"; std::vector<fs::path> files = getTargetFiles(); if (files.empty()) { std::cout << "❗ Файлы с расширением .txt и .cpp не найдены.\n"; return 0; } std::cout << "\nНайденные файлы:\n"; for (size_t i = 0; i < files.size(); ++i) { std::cout << " " << (i + 1) << ". " << files[i].filename() << '\n'; } std::cout << "\nВведите номер файла для обработки (0 — выход): "; int choice; std::cin >> choice; if (choice == 0) { std::cout << "Выход.\n"; return 0; } if (choice < 1 || choice > static_cast<int>(files.size())) { std::cerr << "❌ Ошибка: неверный выбор.\n"; return 1; } fs::path selectedFile = files[choice - 1]; std::cout << "📄 Обрабатываем файл: " << selectedFile.filename() << "\n"; removeEmptyLines(selectedFile); return 0; }
Автор: madmentat — минимализм побеждает пустоту 🦾