[Include] TDW String Library
#1

TDW String Library
github
Описание:
Добавляет большое количество новых функций для работы со строками. Все функции поддерживают упакованные строки!
Функции:

Erase:

erase_first(string[], const find[], bool:ignorecase = false, pos = 0);
Описание:
Вырезает первую найденную подстроку(find) из строки.
Возвращает:
Позицию начала подстроки в строке.
erase_last(string[], const find[], bool:ignorecase = false);
Описание:
Вырезает последнюю найденную подстроку(find) из строки.
Возвращает:
Позицию начала подстроки в строке.
erase_nth(string[], const find[], n, bool:ignorecase = false, pos = 0);
Описание:
Вырезает 'n' найденных подстрок
Возвращает:
-1
erase(string[], start_pos, length = cellmax);
Описание:
Вырезает определённое количество символов, заданных в start_pos(начало) и length(количество символов).
Возвращает:
-1
Find:

find_first(const string[], const find[], bool:ignorecase = false, pos = 0);
Описание:
Ищет подстроку(find) в строке.
Возвращает:
Позицию начала подстроки в строке, в противном случае -1
find_last(const string[], const find[], bool:ignorecase = false);
Описание:
Ищет последнюю найденную подстроку(find) из строки.
Возвращает:
Позицию начала подстроки в строке, в противном случае -1
find_first_of(const string[], const charlist[], pos_string = 0, size = sizeof string);
Описание:
Ищет первый попавшийся символ из массива(charlist) в строке.
Возвращает:
Позицию первого попавшегося символа в строке, в противном случае -1
find_last_of(const string[], const charlist[]);
Описание:
Ищет первый попавшийся символ из массива(charlist) с конца строки.
Возвращает:
Позицию первого попавшегося символа с конца строки, в противном случае -1
find_first_not_of(const string[], const charlist[], pos_string = 0, size = sizeof string);
Описание:
Ищет первый попавшийся символ не из массива(charlist) в строке.
Возвращает:
Позицию первого попавшегося символа в строке, в противном случае -1
find_last_not_of(const string[], const charlist[]);
Описание:
Ищет первый попавшийся символ не из массива(charlist) с конца строки.
Возвращает:
Позицию первого попавшегося символа в строке, в противном случае -1
Replace:

replace_first(string[], const find[], const replace[], bool:ignorecase = false, pos = 0, string_size = sizeof string);
Описание:
Заменяет первую найденную подстроку(find) строкой(replace).
Возвращает:
Если строка найдена - 1, в противном случае 0.
replace_last(string[], const find[], const replace[], bool:ignorecase = false, pos = 0, string_size = sizeof string);
Описание:
Заменяет последнюю найденную подстроку(find) строкой(replace).
Возвращает:
Если строка найдена - 1, в противном случае 0.
replace_nth(string[], const find[], const replace[], n, bool:ignorecase = false, pos = 0, string_size = sizeof string);
Описание:
Заменяет 'n' найденных подстрок(find) строкой(replace).
Возвращает:
Если строка найдена - 1, в противном случае 0.
replace_all(string[], const find[], const replace[], bool:ignorecase = false, pos = 0, string_size = sizeof string);
Описание:
Заменяет все подстроки(find) строкой(replace).
Возвращает:
Если строка найдена - 1, в противном случае 0.
Trim:

trim_left(string[], const delimiter = ' ');
Описание:
Обрезает символы(delimiter) с начала строки.
Возвращает:
-
trim_right(string[], const delimiter = ' ');
Описание:
Обрезает символы(delimiter) с конца строки.
Возвращает:
-
trim(string[], const delimiter = ' ');
Описание:
Обрезает символы(delimiter) с двух сторон строки.
Возвращает:
-
trim_leftex(string[], const delimiters = !" ");
Описание:
Обрезает символы(delimiters) с начала строки.
Возвращает:
-
trim_rightex(string[], const delimiters = !" ");
Описание:
Обрезает символы(delimiters) с конца строки.
Возвращает:
-
trim_ex(string[], const delimiters = !" ");
Описание:
Обрезает символы(delimiter) с двух сторон строки.
Возвращает:
-
Полезные:

IsPackedString(string[]);
Описание:
Определяет формат записи строки в памяти.
Возвращает:
Возвращает true, если строка упакована, в противном случае - false
IsEmptyString(const string[]);
Описание:
Возвращает:
Возвращает true, если строка пустая, в противном случае - false
strcount(const string[], const find[], bool:ignorecase = false, pos = 0, string_size = sizeof string);
Описание:
Подсчитывает количество подстрок(find) в строке.
Возвращает:
Количество вложенных подстрок
strreverse(string[]);
Описание:
Переворачивает строку.
Возвращает:
-
strparttoupper(string[], part_start, part_end, string_size = sizeof string);
Описание:
Данная функция изменяет строчные буквы на заглавные на отдельных участках строки.
Возвращает:
-
strparttolower(string[], part_start, part_end, string_size = sizeof string);
Описание:
Данная функция изменяет заглавные на строчные буквы на отдельных участках строки.
Возвращает:
-
countofuppercase(const string[]);
Описание:
Подсчитывают количество заглавных букв в строке.
Возвращает:
число (процент)
countoflowpercase(const string[]);
Описание:
Подсчитывают количество строчных букв в строке.
Возвращает:
число (процент)
strtrtrans(string[]);
Описание:
Переводит русские символы в транслитерацию.
Возвращает:
-
islowerpart(const string[], start_part_pos, end_part_pos);
Описание:
Проверяет отдельный участок кода на наличие символов в нижним регистре.
Возвращает:
Возвращает true, если в отдельный участке все символы в нижним регистре, иначе false.
isupperpart(const string[], start_part_pos, end_part_pos);
Описание:
Проверяет отдельный участок кода на наличие символов в верхнем регистре.
Возвращает:
Возвращает true, если в отдельный участке все символы в верхнем регистре, иначе false.
strcatex(dest[], size, const ...);
Описание:
Соединяет строки друг с другом по средством strcat.
Возвращает:
Возвращает количество символов.
strfill(string[], const pattern[] = " ", fill_length, E_TDW_FILL_TYPE:type = FILL_TYPE_BOTH, size = sizeof string);
Описание:
Заполняет строку указанной подстрокой.
Возвращает:
Возвращает 1, если fill_length меньше чем size, иначе 0.
strimplodeex(dest[], const delimiter[] = !" ", dest_size = sizeof dest, const ...);
Описание:
Заполняет строки с разделителем(delimiter).
Возвращает:
Количество символов (без размера разделителя).
strimplode(dest[], const arrays[][], const delimiter[] = !" ", array_items = sizeof arrays, dest_size = sizeof dest);
Описание:
Тоже самое, что и strimplodeex, однако значения берутся из массива.
Возвращает:
-
strsplit(dest[], const string[], &index, const seperator = ' ');
Описание:
Подобие strtok, но в более лучшем виде. Примечание: не работает с упакованными строками.
Возвращает:
-
replace_symbol(string[], const _char, replace, pos = 0);
Описание:
Заменяет один символ в строке.
Возвращает:
-
replace_symbols(string[], const _char, replace, pos = 0);
Описание:
Заменяет символы в строке.
Возвращает:
-
Скачать:
github
Установка:
  1. Скачать библиотеку.
  2. Все файлы, точнее библиотеки, переместить в папку 'pawno/includes'. Впрочем, можно воспользоваться флагом '-i<путь>' для указания альтернативного пути для библиотек.
  3. Библиотеки необходимо подключать после файла 'a_samp'.
    Пример:
    pawn Code:
    #include <a_samp>
    #include <tdw_string>
  4. Скомпилировать изменённые вами скрипты.
Благодарности:
  • Untonyst
  • Nexius
  • ziggi
  • DeimoS
  • Stepashka
Распространяется по лицензии ZLIB.
Reply
#2

Описание бы к функциям ещё.
И в трим обычно помимо пробела ещё добавляют символы переноса строки и возврат каретки.
Reply
#3

Quote:
Originally Posted by Stepashka
View Post
Описание бы к функциям ещё.
Описание будет...
UPD: Всё!

Quote:
Originally Posted by Stepashka
View Post
И в трим обычно помимо пробела ещё добавляют символы переноса строки и возврат каретки.
Сделано!
Reply
#4

Возможно сделать для erase_nth и erase возвращать количество "вырезанных" элементов?
И некоторые функции можно объединить если использовать numarg.
Reply
#5

Quote:
Originally Posted by Stepashka
View Post
Возможно сделать для erase_nth и erase возвращать количество "вырезанных" элементов?
И некоторые функции можно объединить если использовать numarg.
1. В erase такого сделать нельзя, ведь это просто wrapper функции strdel, однако можно попробовать сделать это с функцией erase_nth.

2. Какие именно функции?
Reply
#6

Ну например replace_nth и replace_all, find_first и find_first_of, find_last и find_last_of.
С ходу этого не сделать, нужно подумать, но сократить список на треть вполне возможно))
Reply
#7

Quote:
Originally Posted by Stepashka
View Post
Ну например replace_nth и replace_all, find_first и find_first_of, find_last и find_last_of.
С ходу этого не сделать, нужно подумать, но сократить список на треть вполне возможно))
Будет некрасиво. Возможно, что создам некоторую функцию, которая будет определять, какую функцию использовать. Возможно, именно это ты и имел в виду.

Более того, а зачем использовать numargs, если есть #emit?
Reply
#8

Quote:
Originally Posted by VVWVV
View Post
Более того, а зачем использовать numargs, если есть #emit?
Это был лишь пример, на самом деле не нужно ни то ни другое, достаточно проверять что пришло на входе динамических переменных.
Reply
#9

Пока не знаю буду использовать или нет.
Мне интересно следующее:
PHP Code:
stock TDWSH@strcmp(const string1[], const string2[], bool:ignorecase=falselength cellmax)
{
    new 
is_empty@s1 IsEmptyString(string1),
        
is_empty@s2 IsEmptyString(string2)
    ;
    return 
is_empty@s1 != is_empty@s2 != strcmp(string1string2ignorecaselength) : is_empty@s2 != ? -0;

На сегодняшний момент я знаю, что можно делать какие-то приёмы с тернарным оператором вот так:
PHP Code:
return variable == 100 true false;
return (
variable == 100 || variable == 150) ? true false
А в твоём коде подряд используются операторы ? и :
Это что за приём такой? Прочти условие на словах, мож тогда пойму.
Reply
#10

На сколько я понял, это код:
Code:
return is_empty@s1 != 0 ? is_empty@s2 != 0 ? strcmp(string1, string2, ignorecase, length) : 1 : is_empty@s2 != 0 ? -1 : 0;
Выполняется вот так:
Code:
return is_empty@s1 != 0 ? (is_empty@s2 != 0 ? strcmp(string1, string2, ignorecase, length) : 1) : (is_empty@s2 != 0 ? -1 : 0);
Reply
#11

Надо просто скобки расставлять ((выражение) ? (если истина) : (если ложь)), чтобы не получалось вырвиглазно. Отсутствие удобочитаемости очевидно, делаю вывод, что это понты.
Reply
#12

Quote:
Originally Posted by stabker
View Post
Надо просто скобки расставлять ((выражение) ? (если истина) : (если ложь)), чтобы не получалось вырвиглазно. Отсутствие удобочитаемости очевидно, делаю вывод, что это понты.
Там код вообще не предназначен для сокращённого написания условий, обычный if/else был бы гораздо более уместен.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)