आपका C++ सिर्फ गेम्स और ड्राइवर्स के लिए नहीं है
\n\nजब "C++" सुनते हैं, तो अक्सर भारी-भरकम चीज़ें याद आती हैं: Unreal इंजन, ऑपरेटिंग सिस्टम, हाई-लोड सर्वर। लेकिन इसका एक और बेहद उपयोगी पहलू है — C++ में टास्क ऑटोमेशन। जब आपके सहकर्मी एक बार इस्तेमाल होने वाली bash स्क्रिप्ट्स लिख रहे हों या Python डिपेंडेंसीज़ से जूझ रहे हों, आप एक कॉम्पैक्ट और तेज़ यूटिलिटी बना सकते हैं जो बिना किसी इंटरप्रेटर अपडेट के सालों काम करेगी।
\n\nइस आर्टिकल में मैं दिखाऊंगा कि कैसे C++ को ऑटोमेशन के लिए स्विस आर्मी नाइफ की तरह इस्तेमाल करें। हम रियल उदाहरण देखेंगे: फ़ाइलों का बैच रीनेमिंग, लॉग पार्सिंग और रिपोर्ट जनरेशन। आप पाएंगे कि C++ के साथ रूटीन ऑटोमेशन मुश्किल नहीं, बल्कि स्पीड और विश्वसनीयता के लिहाज से बेहद फायदेमंद है।
\n\nC++ ही क्यों, Python या Bash क्यों नहीं?
\n\nहर भाषा का अपना स्थान है। लेकिन कुछ परिदृश्यों में C++ बाजी मार लेता है:
\n\n- \n
- एक्ज़ीक्यूशन स्पीड. अगर आप टेराबाइट्स लॉग प्रोसेस कर रहे हैं — हर मिलीसेकंड मायने रखता है। \n
- डिपेंडेंसीज़ की कमी. एक स्टैटिकली कंपाइल्ड बाइनरी बिना किसी इंटरप्रेटर के किसी भी Linux/Windows पर चलती है। \n
- टाइप सेफ्टी. रनटाइम में कम सरप्राइज़ — शेड्यूल पर चलने वाले ऑटोमेशन के लिए ज़रूरी। \n
- सिस्टम एक्सेस. WinAPI, POSIX, रजिस्ट्री, प्रोसेसेज़ — बिना किसी लेयर के सीधा काम। \n
बेशक, तेज़ प्रोटोटाइप के लिए Python बेहतर है। लेकिन जब स्क्रिप्ट CI/CD या प्रोडक्शन इन्फ्रास्ट्रक्चर का हिस्सा बन जाती है, C++ ऑटोमेशन कई गुना फायदा देता है।
\n\nटूलकिट: क्या जानना ज़रूरी है
\n\nहमारे कामों के लिए पूरा C++20 नहीं चाहिए। बेसिक सेट काफी है:
\n\n- \n
std::filesystem(C++17) — फ़ाइलों और फ़ोल्डरों के साथ काम \nstd::regex— टेक्स्ट पार्सिंग \nstd::fstream/std::stringstream— पढ़ना/लिखना \nstd::chrono— समय माप और लॉगिंग \n
कंपाइल करें -std=c++17 फ्लैग के साथ (या MSVC के लिए /std:c++17)।
उदाहरण 1: फ़ाइलों का बैच रीनेमिंग
\n\nसोचिए: आपके पास IMG_001.jpg, IMG_002.jpg फोटोज़ का फ़ोल्डर है। इन्हें 2025_01_15_001.jpg फॉर्मेट में लाना है। हाथ से करेंगे तो 10 मिनट बोरिंग काम। स्क्रिप्ट से — 0.2 सेकंड।
कोड
\n#include <iostream>\n#include <filesystem>\n#include <regex>\n#include <string>\n\nnamespace fs = std::filesystem;\n\nint main() {\n std::string dir_path = "./photos";\n std::regex pattern(R"(IMG_(\\d+)\\.jpg)");\n std::string prefix = "2025_01_15_";\n\n for (auto &entry : fs::directory_iterator(dir_path)) {\n std::string filename = entry.path().filename().string();\n std::smatch match;\n\n if (std::regex_match(filename, match, pattern)) {\n std::string new_name = prefix + match[1].str() + ".jpg";\n fs::rename(entry.path(), entry.path().parent_path() / new_name);\n std::cout << "Renamed: " << filename << " -> " << new_name << "\\n";\n }\n }\n return 0;\n}\n\nयह उदाहरण दिखाता है कि कैसे C++ में टास्क ऑटोमेशन std::filesystem और रेगुलर एक्सप्रेशन की मदद से रोज़मर्रा की समस्या को कुछ लाइनों में हल करता है। आप इसे अपने पैटर्न के हिसाब से आसानी से बदल सकते हैं।
उदाहरण 2: लॉग पार्सिंग और एरर काउंट
\n\nमान लीजिए सर्वर इस फॉर्मेट में लॉग लिखता है:
\n2025-01-15 10:23:45 [ERROR] Database connection failed\n2025-01-15 10:23:46 [INFO] Retry #1\n2025-01-15 10:23:47 [ERROR] Timeout exceeded\n\nहमें स्टैटिस्टिक्स चाहिए: हर टाइप की कितनी एरर हैं, और टॉप-5 सबसे कॉमन मैसेज। Bash वन-लाइनर काम करेगा, लेकिन अगर लॉग गीगाबाइट्स में हैं — C++ कई गुना तेज़ होगा।
\n\nकोड
\n#inc