#pragma once #include #include #include #include #include #include #include namespace Incart::Common { struct StringExtensions { static bool isEqualsInsensitive(const std::string& a, const std::string& b) { return std::equal(a.begin(), a.end(), b.begin(), b.end(), [](char a, char b) { return tolower(a) == tolower(b); }); } static size_t split(const std::string &txt, std::vector &strs, char ch) { size_t pos = txt.find(ch); size_t initialPos = 0; strs.clear(); // Decompose statement while (pos != std::string::npos) { strs.push_back(txt.substr(initialPos, pos - initialPos)); initialPos = pos + 1; pos = txt.find(ch, initialPos); } // Add the last one strs.push_back(txt.substr(initialPos, std::min(pos, txt.size()) - initialPos + 1)); return strs.size(); } static std::vector toUtf8FromWindows1251(const std::string& sourceText) { if (sourceText.size() == 0) { return {}; } QTextCodec* win1251Codec = QTextCodec::codecForName("Windows-1251"); QTextCodec* utf8Codec = QTextCodec::codecForName("UTF-8"); QString unicodeText = win1251Codec->toUnicode(sourceText.c_str(), static_cast(sourceText.size())); QByteArray bytes = utf8Codec->fromUnicode(unicodeText); return std::vector(bytes.begin(), bytes.end()); } static std::string toUtf8StringFromWindows1251(const std::string& sourceText) { if (sourceText.size() == 0) { return ""; } QTextCodec* win1251Codec = QTextCodec::codecForName("Windows-1251"); QTextCodec* utf8Codec = QTextCodec::codecForName("UTF-8"); QString unicodeText = win1251Codec->toUnicode(sourceText.c_str(), static_cast(sourceText.size())); QString utf8Text = utf8Codec->fromUnicode(unicodeText); return utf8Text.toStdString(); } static std::string toUtf8StringFromWindows1251(const std::vector& sourceTextBytes) { if (sourceTextBytes.size() == 0) { return ""; } QTextCodec* win1251Codec = QTextCodec::codecForName("Windows-1251"); QTextCodec* utf8Codec = QTextCodec::codecForName("UTF-8"); QString unicodeText = win1251Codec->toUnicode(reinterpret_cast(sourceTextBytes.data()), static_cast(sourceTextBytes.size())); QString utf8Text = utf8Codec->fromUnicode(unicodeText); return utf8Text.toStdString(); } static std::wstring toWStringFromWindows1251(const std::vector& sourceTextBytes) { if (sourceTextBytes.size() == 0) { return L""; } QTextCodec* win1251Codec = QTextCodec::codecForName("Windows-1251"); QString unicodeText = win1251Codec->toUnicode(reinterpret_cast(sourceTextBytes.data()), static_cast(sourceTextBytes.size())); return unicodeText.toStdWString(); } static std::vector toWindows1251FromUtf8(const std::string& sourceText) { if (sourceText.size() == 0) { return {}; } QTextCodec* win1251Codec = QTextCodec::codecForName("Windows-1251"); QTextCodec* utf8Codec = QTextCodec::codecForName("UTF-8"); QString unicodeText = utf8Codec->toUnicode(sourceText.c_str(), static_cast(sourceText.size())); QByteArray bytes = win1251Codec->fromUnicode(unicodeText); return std::vector(bytes.begin(), bytes.end()); } static std::string getZeroLeadNumberText(int number, uint32_t fieldSize) { std::string zeroLeadText; std::string numberText(std::to_string(number)); int zeroCount = static_cast(fieldSize) - static_cast(numberText.size()); if (zeroCount > 0) { for (int i = 0; i < zeroCount; ++i) { zeroLeadText += "0"; } } return zeroLeadText + numberText; } }; } // namespace Incart::Common