Skip to content
This repository was archived by the owner on Aug 4, 2025. It is now read-only.

Commit 8f1eb31

Browse files
committed
upd
1 parent dc4b9aa commit 8f1eb31

5 files changed

Lines changed: 23 additions & 54 deletions

File tree

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,9 @@ void toUpperCase(); // преобразовать буквы в ве
120120
int indexOf(char, from); // найти символ char, искать начиная с from
121121
int indexOf(char[], from); // найти строку char, искать начиная с from
122122

123-
int split(char* str[], div); // разделить на строки по разделителю div
124-
void unsplit(div); // вернуть разделители после split
123+
int splitAmount(char div = ','); // посчитать количество подстрок по разделителю
124+
int split(char* str[], div = ','); // разделить на строки по разделителю div
125+
void unsplit(div); // вернуть разделители после split
125126

126127
// Парсинг пакета, в котором данные разделены разделителем div
127128
// data - целочисленный массив любого типа
@@ -231,7 +232,7 @@ void setup() {
231232
232233
// разделение
233234
test = "hello,1234,test,5678";
234-
char* strings[5];
235+
char* strings[test.splitAmount(',')];
235236
int amount = test.split(strings, ',');
236237
// действие испортит строку, добавив в неё NULLы!
237238
@@ -263,6 +264,7 @@ void loop() {
263264
- v1.3 - добавлена универсальная функция parse
264265
- v1.4 - возможность инициализации внешнего буфера без очистки
265266
- v1.5 - добавлена updateLength()
267+
- v1.6 - исправлена ошибка на ESP32, добавлена splitAmount()
266268

267269
<a id="feedback"></a>
268270
## Баги и обратная связь

examples/demo/demo.ino

Lines changed: 5 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,4 @@
11
#include "mString.h"
2-
/*
3-
Создание
4-
mString<размер> str
5-
6-
str.length() - текущий размер
7-
str.clear() - очистить
8-
str.add( [char / char* / Fchar / числа / String] ) - добавить
9-
str += [char / char* / Fchar / числа / String] - добавить
10-
str = str + [char / char* / Fchar / числа / String] - можно суммировать
11-
str == [char / char* / числа / String] - сравнить
12-
Для добавления/сравнения с mString используй str.buf
13-
14-
Чтение символа по индексу
15-
str[idx]
16-
str.buf[idx]
17-
str.charAt(idx)
18-
19-
Запись символа по индексу
20-
str[idx] = с
21-
str.buf[idx] = с
22-
str.setCharAt(idx, c)
23-
24-
Доступ к char буферу
25-
str.buf
26-
str.c_str()
27-
28-
str.toInt(from) - преобразовать в int начиная с from
29-
str.toUint(from) - преобразовать в uint начиная с from
30-
str.toFloat(from) - преобразовать в float начиная с from
31-
str.startsWith(char*) - начинается с
32-
str.substring(from, to, char* arr) - скопировать с from до to во внешний arr
33-
str.truncate(amount) - обрезать с конца на amount
34-
str.remove(idx, amount) - удалить (вырезать) amount символов начиная с idx
35-
str.toLowerCase() - преобразовать буквы в нижний регистр
36-
str.toUpperCase() - преобразовать буквы в верхний регистр
37-
str.indexOf(char, from) - найти символ char, искать начиная с from
38-
str.indexOf(char*, from) - найти строку char, искать начиная с from
39-
str.split(char* str[], div) - разделить на строки по разделителю div
40-
41-
Парсинг пакета, в котором данные разделены разделителем div и оканчиваются символом ter
42-
str.parseBytes(data, len, div, ter) - распарсить содержимое в массив byte длиной len
43-
str.parseInts(data, len, div, ter) - распарсить содержимое в массив int длиной len
44-
div и ter по умолчанию , и NULL
45-
Например для парсинга таких пакетов: "12,34,56"
46-
Кастомные: "12;34;56;78\n"
47-
Парсим str.parseBytes(data, len, ';', '\n')
48-
*/
492

503
void setup() {
514
Serial.begin(9600);
@@ -139,13 +92,17 @@ void setup() {
13992

14093
// разделение
14194
test = "hello,1234,test,5678";
142-
char* strings[5];
95+
char* strings[test.splitAmount(',')];
96+
14397
int amount = test.split(strings, ',');
98+
// также вернёт количество подстрок (равное splitAmount выше)
14499
// действие испортит строку, добавив в неё NULLы!
145100

146101
for (int i = 0; i < amount; i++) {
147102
Serial.println(strings[i]);
148103
}
104+
105+
test.unsplit(','); // вернуть строку к исходному виду
149106
}
150107

151108
void loop() {

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ c_str KEYWORD2
2828
startsWith KEYWORD2
2929
startsWith_P KEYWORD2
3030
substring KEYWORD2
31+
splitAmount KEYWORD2
3132
split KEYWORD2
3233
unsplit KEYWORD2
3334
truncate KEYWORD2

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=mString
2-
version=1.5
2+
version=1.6
33
author=AlexGyver <alex@alexgyver.ru>
44
maintainer=AlexGyver <alex@alexgyver.ru>
55
sentence=Static lightweight analog of String class

src/mString.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
v1.3 - добавлена универсальная функция parse
2323
v1.4 - возможность инициализации внешнего буфера без очистки
2424
v1.5 - добавлена updateLength()
25+
v1.6 - исправлена ошибка на ESP32, добавлена splitAmount()
2526
*/
2627

2728
#ifndef _mString_h
@@ -47,10 +48,10 @@ class mString {
4748
char* buf;
4849
uint16_t _MS_SIZE = 0;
4950

50-
mString(char* nbuf, uint16_t size, bool clear = true) {
51+
mString(char* nbuf, uint16_t size, bool clearf = true) {
5152
buf = nbuf;
5253
_MS_SIZE = size;
53-
if (clear) clear();
54+
if (clearf) clear();
5455
else _len = strlen(buf);
5556
}
5657
#endif
@@ -340,6 +341,14 @@ class mString {
340341
strcpy(arr, buf + from);
341342
buf[to] = backup;
342343
}
344+
int splitAmount(char div = ',') {
345+
int count = 1;
346+
char* p = buf;
347+
do {
348+
if (*p == div) count++;
349+
} while (*(++p));
350+
return count;
351+
}
343352
int split(char** ptrs, char div = ',') {
344353
int i = 0, j = 1;
345354
ptrs[0] = buf;

0 commit comments

Comments
 (0)