SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian > Релизы/Releases

Reply
 
Thread Tools Display Modes
Old 27/11/2016, 11:33 PM   #1
VVWVV
Big Clucker
 
Join Date: Jun 2015
Posts: 144
Reputation: 70
Default TDW String Library


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.

Last edited by VVWVV; 28/11/2016 at 03:57 PM.
VVWVV is offline   Reply With Quote
Old 28/11/2016, 07:41 AM   #2
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,467
Reputation: 135
Default Re: TDW String Library

Описание бы к функциям ещё.
И в трим обычно помимо пробела ещё добавляют символы переноса строки и возврат каретки.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 28/11/2016, 12:07 PM   #3
VVWVV
Big Clucker
 
Join Date: Jun 2015
Posts: 144
Reputation: 70
Default Re: TDW String Library

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

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

Last edited by VVWVV; 28/11/2016 at 01:07 PM.
VVWVV is offline   Reply With Quote
Old 28/11/2016, 01:55 PM   #4
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,467
Reputation: 135
Default Re: TDW String Library

Возможно сделать для erase_nth и erase возвращать количество "вырезанных" элементов?
И некоторые функции можно объединить если использовать numarg.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 28/11/2016, 01:59 PM   #5
VVWVV
Big Clucker
 
Join Date: Jun 2015
Posts: 144
Reputation: 70
Default Re: TDW String Library

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

2. Какие именно функции?
VVWVV is offline   Reply With Quote
Old 28/11/2016, 02:11 PM   #6
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,467
Reputation: 135
Default Re: TDW String Library

Ну например replace_nth и replace_all, find_first и find_first_of, find_last и find_last_of.
С ходу этого не сделать, нужно подумать, но сократить список на треть вполне возможно))
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 28/11/2016, 02:14 PM   #7
VVWVV
Big Clucker
 
Join Date: Jun 2015
Posts: 144
Reputation: 70
Default Re: TDW String Library

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

Более того, а зачем использовать numargs, если есть #emit?
VVWVV is offline   Reply With Quote
Old 28/11/2016, 02:52 PM   #8
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,467
Reputation: 135
Default Re: TDW String Library

Quote:
Originally Posted by VVWVV View Post
Более того, а зачем использовать numargs, если есть #emit?
Это был лишь пример, на самом деле не нужно ни то ни другое, достаточно проверять что пришло на входе динамических переменных.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 15/12/2016, 12:38 AM   #9
Diman777
Huge Clucker
 
Diman777's Avatar
 
Join Date: Aug 2011
Location: Ростов-на-Дону
Posts: 438
Reputation: 22
Default Re: TDW String Library

Пока не знаю буду использовать или нет.
Мне интересно следующее:
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
А в твоём коде подряд используются операторы ? и :
Это что за приём такой? Прочти условие на словах, мож тогда пойму.
Diman777 is offline   Reply With Quote
Old 15/12/2016, 12:48 AM   #10
Romz
High-roller
 
Romz's Avatar
 
Join Date: Jun 2013
Location: Ukraine
Posts: 1,070
Reputation: 64
Default Re: TDW String Library

На сколько я понял, это код:
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);
Romz is online now   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Include] TDW String Library VVWVV Includes 6 01/12/2016 08:52 PM
input line too long (after substitutions) invalid string (possibly non-terminated string) StackedPizza Scripting Help 4 09/11/2016 03:34 AM
Assignment operator overloading (Dynamic string library) Johnson_boy Scripting Help 0 24/06/2014 09:23 PM
input line too long (after substitutions) - invalid string (possibly non-terminated string) MahmutBey Help Archive 7 10/03/2011 03:02 PM


All times are GMT. The time now is 06:23 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.