mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-28 15:12:19 +03:00
129 lines
3.4 KiB
C++
129 lines
3.4 KiB
C++
#include "Utils\StringUtils.h"
|
||
|
||
String selectToMarkerLast(String str, String found) {
|
||
int p = str.lastIndexOf(found);
|
||
return str.substring(p + found.length());
|
||
}
|
||
|
||
String selectToMarker(String str, String found) {
|
||
int p = str.indexOf(found);
|
||
return str.substring(0, p);
|
||
}
|
||
|
||
String deleteAfterDelimiter(String str, String found) {
|
||
int p = str.indexOf(found);
|
||
return str.substring(0, p);
|
||
}
|
||
|
||
String deleteBeforeDelimiter(String str, String found) {
|
||
int p = str.indexOf(found) + found.length();
|
||
return str.substring(p);
|
||
}
|
||
|
||
String deleteBeforeDelimiterTo(String str, String found) {
|
||
int p = str.indexOf(found);
|
||
return str.substring(p);
|
||
}
|
||
|
||
String deleteToMarkerLast(String str, String found) {
|
||
int p = str.lastIndexOf(found);
|
||
return str.substring(0, p);
|
||
}
|
||
|
||
String selectToMarkerPlus(String str, String found, int plus) {
|
||
int p = str.indexOf(found);
|
||
return str.substring(0, p + plus);
|
||
}
|
||
|
||
String selectFromMarkerToMarker(String str, String tofind, int number) {
|
||
if (str.indexOf(tofind) == -1) {
|
||
return "not found";
|
||
}
|
||
str += tofind; // добавим для корректного поиска
|
||
uint8_t i = 0; // Индекс перебора
|
||
do {
|
||
if (i == number) {
|
||
// если индекс совпал с позицией
|
||
return selectToMarker(str, tofind);
|
||
}
|
||
// отбросим проверенный блок до разделителя
|
||
str = deleteBeforeDelimiter(str, tofind);
|
||
i++;
|
||
} while (str.length() != 0);
|
||
|
||
return "not found";
|
||
}
|
||
|
||
uint8_t hexStringToUint8(String hex) {
|
||
uint8_t tmp = strtol(hex.c_str(), NULL, 0);
|
||
if (tmp >= 0x00 && tmp <= 0xFF) {
|
||
return tmp;
|
||
}
|
||
}
|
||
|
||
uint16_t hexStringToUint16(String hex) {
|
||
uint16_t tmp = strtol(hex.c_str(), NULL, 0);
|
||
if (tmp >= 0x0000 && tmp <= 0xFFFF) {
|
||
return tmp;
|
||
}
|
||
}
|
||
|
||
size_t itemsCount(String str, const String &separator) {
|
||
// если строки поиск нет сразу выход
|
||
if (str.indexOf(separator) == -1) {
|
||
return 0;
|
||
}
|
||
// добавим для корректного поиска
|
||
str += separator;
|
||
size_t cnt = 0;
|
||
while (str.length()) {
|
||
// отбросим проверенный блок до разделителя
|
||
str = deleteBeforeDelimiter(str, separator);
|
||
cnt++;
|
||
}
|
||
return cnt;
|
||
}
|
||
|
||
boolean isDigitStr(const String &str) {
|
||
for (size_t i = 0; i < str.length(); i++) {
|
||
if (!isDigit(str.charAt(i))) {
|
||
return false;
|
||
}
|
||
}
|
||
return str.length();
|
||
}
|
||
|
||
String prettyBytes(size_t size) {
|
||
if (size < 1024)
|
||
return String(size) + "b";
|
||
else if (size < (1024 * 1024))
|
||
return String(size / 1024.0) + "kB";
|
||
else if (size < (1024 * 1024 * 1024))
|
||
return String(size / 1024.0 / 1024.0) + "MB";
|
||
else
|
||
return String(size / 1024.0 / 1024.0 / 1024.0) + "GB";
|
||
}
|
||
|
||
static const char *str_info = "I";
|
||
static const char *str_warn = "W";
|
||
static const char *str_error = "E";
|
||
static const char *str_unknown = "?";
|
||
|
||
String getErrorLevelStr(ErrorLevel_t level) {
|
||
const char *ptr;
|
||
switch (level) {
|
||
case EL_INFO:
|
||
ptr = str_info;
|
||
break;
|
||
case EL_WARNING:
|
||
ptr = str_warn;
|
||
break;
|
||
case EL_ERROR:
|
||
ptr = str_error;
|
||
break;
|
||
default:
|
||
ptr = str_unknown;
|
||
break;
|
||
}
|
||
return String(ptr);
|
||
} |