Кибор » Кибор - Интегрированная среда разработки ботов » Готовые скрипты » Работа со строками

Страниц (1): [1]
 

1. idcco - 25 Марта, 2017 - 14:19:51 - перейти к сообщению
Довольно часто пользуюсь, когда нужно найти в строке что-то и вырезать, обрезать часть, и т.д... Похожих запросов не нашел, может кому-то пригодится...

strdelsymb (string str, string symbols) - убирает перечисленные символы из строки
stronlysymb (string str, string symbols) - оставляет в строке только перечисленные символы
strto (string str, string symbol) - обрезает строку от начала до нужного символа
strsince (string str, string symbol) - обрезает строку с конца до нужного символа

PHP:
function strdelsymb (string str, string symbols)
//убирает из строки str символы, которые перечислены в symbols
//str максимум 300 символов, symbols максимум 100 символов
//отсутствие значений symbols понимает как отссутствие фильтра
//strdelsymb ("Hello_World2017", "0123456789_") вернет "HelloWorld".
{
char chrstr[300];
strcpy (#chrstr[0], str);
int strsize = size (#chrstr[0]);
char chrsymb[100];
strcpy (#chrsymb[0], symbols);
int symbsize = size (#chrsymb[0]);
int accept;
str = "";
for (int i = 0; i < strsize; i++)
{
accept = 1;
for (int j = 0; j < symbsize; j++)
{
if (chrstr[i] == chrsymb[j]) accept = 0;
}
if (accept == 1) str = str + chrstr[i];
}
return str;
}

function stronlysymb (string str, string symbols)
//убирает из строки str все, кроме перечисленого в symbols
//str максимум 300 символов, symbols максимум 500 символов
//отсутствие значений symbols понимает как отссутствие выбора и возврашает пустую строку
//stronlysymb ("Hello_World2017", "0123456789_") вернет "_2017".
{
char chrstr[300];
strcpy (#chrstr[0], str);
int strsize = size (#chrstr[0]);
char chrsymb[500];
strcpy (#chrsymb[0], symbols);
int symbsize = size (#chrsymb[0]);
int accept;
str = "";
for (int i = 0; i < strsize; i++)
{
accept = 0;
int j = 0;
while (j < symbsize && accept == 0)
{
if (chrstr[i] == chrsymb[j]) accept = 1;
j++;
}
if (accept == 1) str = str + chrstr[i];
}
return str;
}

function strto (string str, string symbol)
//убирает из строки str все что найдено после первого символа symbol в строке str
//str максимум 300 символов, symbol максимум 1 символ ессьно, иначе вернет str
//отсутствие значения symbol понимает как начало строки str
//strto ("Hello_World2017", "h") вернет "Hello_World2017".
//strto ("Hello_World2017", "_") вернет "Hello".
//strto ("Hello_World2017", "o") вернет "Hell".
{
char chrstr[300];
strcpy (#chrstr[0], str);
int strsize = size (#chrstr[0]);
int accept = -1;
string strnew = "";
int i = 0;
while (i < strsize && accept == -1)
{
if (chrstr[i] == symbol)
{
accept = i;
}
i++;
}
for (i = 0; i < accept; i++)
{
strnew = strnew + chrstr[i];
}
if (strnew != "") str = strnew;
return str;
}

function strsince (string str, string symbol)
//убирает из строки str все что найдено до последнего символа symbol в строке str
//str максимум 300 символов, symbol максимум 1 символ ессьно, иначе вернет str
//отсутствие значения symbol понимает как начало строки str
//strsince ("Hello_World2017", "h") вернет "Hello_World2017".
//strsince ("Hello_World2017", "_") вернет "_World2017".
//strsince ("Hello_World2017", "o") вернет "orld2017".
{
char chrstr[300];
strcpy (#chrstr[0], str);
int strsize = size (#chrstr[0]);
int accept = 0;
str = "";
for (int i = 0; i < strsize; i++)
{
if (chrstr[i] == symbol)
{
accept = i;
}
}
for (i = accept; i < strsize; i++)
{
str = str + chrstr[i];
}
return str;
}

Всем бобра! =)
(Добавление)
Вот еще парочка:

strfindto (string str, int from, int to) - обрезает строку с from-ного символа по to-тый (в т.ч. и с конца строки)
strfind (string str, int from, int length) - обрезает строку с from-ного символа на длину length (в т.ч. и с конца строки)

PHP:
function strfindto (string str, int from, int to)
//выбирает из строки str все что найдено с from-ного по счету символа по to-тый
//отрицательные значения понимает как направление с конца строки str к началу
//str максимум 300 символов, from и to целые числа (понимаются как две позиции в строке)
//отсутствие length понимается как выбор от начала строки до указанного значения from.
//strfindto ("Hello_World2017") вернет "H".
//strfindto ("Hello_World2017", 0) вернет "H".
//strfindto ("Hello_World2017", 5) вернет "Hello".
//strfindto ("Hello_World2017", -5) вернет "Hello_World".
//strfindto ("Hello_World2017", 0, 0) вернет "Hello_World2017".
//strfindto ("Hello_World2017", 0, 20) вернет "Hello_World2017".
//strfindto ("Hello_World2017", 0, -15) вернет "H".
//strfindto ("Hello_World2017", 1, -1) вернет "Hello_World2017".
//strfindto ("Hello_World2017", 1, -15) вернет "H".
//strfindto ("Hello_World2017", -1, 1) вернет "Hello_World2017".
//strfindto ("Hello_World2017", -1, -15) вернет "Hello_World2017".
//strfindto ("Hello_World2017", 1, 5) вернет "Hello".
//strfindto ("Hello_World2017", 0, 5) вернет "Hello".
//strfindto ("Hello_World2017", 7, 5) вернет "o_W".
//strfindto ("Hello_World2017", 5, 7) вернет "o_W".
//strfindto ("Hello_World2017", -7, 5) вернет "o_Wor".
//strfindto ("Hello_World2017", 5, -7) вернет "o_Wor".
//strfindto ("Hello_World2017", -5, 7) вернет "World".
//strfindto ("Hello_World2017", 7, -5) вернет "World".
//strfindto ("Hello_World2017", -7, -5) вернет "rld".
//strfindto ("Hello_World2017", -5, -7) вернет "rld".
{
char chrstr[300];
strcpy (#chrstr[0], str);
int strsize = size (#chrstr[0]);
int pos1 = 0;
int pos2 = strsize;
int posb = 0;
int pose = strsize;
if (from > 0) {from = from - 1; pos1 = from;}
if (from < 0) {pos1 = strsize + from;}
if (to == 0) {to = strsize; pos2 = to;}
if (to > 0 ) {to = to - 1; pos2 = to;}
if (to < 0 ) {pos2 = strsize + to;}
if (pos1 > strsize) pos1 = strsize;
if (pos1 < 0) pos1 = 0;
if (pos2 > strsize) pos2 = strsize;
if (pos2 < 0) pos2 = 0;
if (pos1 > pos2) {posb = pos2; pose = pos1;}
else {posb = pos1; pose = pos2;}
str = "";
for (int i = posb; i <= pose; i++)
{
str = str + chrstr[i];
}
return str;
}

function strfind (string str, int from, int length)
//выбирает из строки str все что найдено с from-ного по счету символа на length символов
//отрицательные значения понимает как направление с конца строки str к началу
//str максимум 300 символов, from и length целые числа
//отсутствие length понимается как выбор от начала строки до указанного значения from.
//strfind ("Hello_World2017") вернет "H".
//strfind ("Hello_World2017", 0) вернет "H".
//strfind ("Hello_World2017", 5) вернет "Hello".
//strfind ("Hello_World2017", -5) вернет "Hello_World".
//strfind ("Hello_World2017", 0, 0) вернет "Hello_World2017".
//strfind ("Hello_World2017", 0, 20) вернет "Hello_World2017".
//strfind ("Hello_World2017", 0, -15) вернет "H".
//strfind ("Hello_World2017", 1, -1) вернет "H".
//strfind ("Hello_World2017", 1, -15) вернет "H".
//strfind ("Hello_World2017", -1, 1) вернет "7".
//strfind ("Hello_World2017", -1, -15) вернет "Hello_World2017".
//strfind ("Hello_World2017", 1, 5) вернет "Hello".
//strfind ("Hello_World2017", 0, 5) вернет "Hello".
//strfind ("Hello_World2017", 7, 5) вернет "World".
//strfind ("Hello_World2017", 5, 7) вернет "o_World".
//strfind ("Hello_World2017", -7, 5) вернет "rld20".
//strfind ("Hello_World2017", -5, 7) вернет "d2017".
//strfind ("Hello_World2017", 7, -5) вернет "llo_W".
//strfind ("Hello_World2017", 5, -7) вернет "Hello".
//strfind ("Hello_World2017", -7, -5) вернет "o_Wor".
//strfind ("Hello_World2017", -5, -7) вернет "o_World".
{
char chrstr[300];
strcpy (#chrstr[0], str);
int strsize = size (#chrstr[0]);
int pos1 = 0;
int pos2 = strsize;
int posb = 0;
int pose = strsize;
if (from > 0) {from = from - 1; pos1 = from;}
if (from < 0) {pos1 = strsize + from;}
if (length == 0) {length = strsize; pos2 = pos1 + length;}
if (length > 0 ) {length = length - 1; pos2 = pos1 + length;}
if (length < 0 ) {length = length + 1; pos2 = pos1 + length;}
if (pos1 > strsize) pos1 = strsize;
if (pos1 < 0) pos1 = 0;
if (pos2 > strsize) pos2 = strsize;
if (pos2 < 0) pos2 = 0;
if (pos1 > pos2) {posb = pos2; pose = pos1;}
else {posb = pos1; pose = pos2;}
str = "";
for (int i = posb; i <= pose; i++)
{
str = str + chrstr[i];
}
return str;
}
2. idcco - 01 Апреля, 2017 - 01:04:48 - перейти к сообщению
Вот еще одна очень ползная:

strsearch (string str, string long) - ищет часть строки в строке

CODE:
function strsearch (string str, string long)
//ищет строку str в строке long, при не нахождении возвращает 0
//при полном совпадении возвращает позицию первого символа str в строке long
//strsearch ("World", "Hello_World2017") вернет 7
//strsearch ("world", "Hello_World2017") вернет 0
//strsearch ("erty", "qwertyuiop") вернет 3
//strsearch ("Кальк", "Калькулятор") вернет 1
//strsearch ("Блокнот", "text.txt — Блокнот") вернет 12
//по сути если функция вернула значение больше 0 то строка найдена
{
char chrstr[300];
strcpy (#chrstr[0], str);
int strsize = size (#chrstr[0]);
char chrlong[1000];
strcpy (#chrlong[0], long);
int longsize = size (#chrlong[0]);
int find_in = 0;
int s = 0;
for (int i = 0; i < longsize - strsize + 1; i++)
{
for (int j = 0; j < strsize; j++)
{
if (chrstr[j] == chrlong[i + j]) s++;
else { s = 0; j = strsize; }
}
if (s == strsize) { find_in = i + 1; i = longsize; }
}
return find_in;
}

Powered by ExBB FM 1.0 Final