Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 18

Тема: TDW String Library

  1. #1
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±

    TDW String Library

    TDW String Library
    github

    Описание:
    Добавляет большое количество новых функций для работы со строками.

    Функции:
    Функция Описание Возвращает
    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_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_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.
    IsPackedString(string[]) Определяет формат записи строки в памяти. Возвращает true, если строка упакована, в противном случае - false
    IsEmptyString(const string[]) Возвращает true, если строка пустая, в противном случае - false
    memcmp(const string1[], const string2[], n = cellmax, size_1 = sizeof string1, size_2 = sizeof string2) Проверяет строки в памяти на соответствие между ними. Возвращает 0, если блоки идентичны
    strcount(const string[], const find[], bool:ignorecase = false, pos = 0, string_size = sizeof string) Подсчитывает количество подстрок(find) в строке Количество вложенных подстрок
    strreverse(string[]) Переворачивает строку -
    trim_left(string[], const delimiter = ' ') Обрезает символы(delimiter) с начала строки -
    trim_right(string[], const delimiter = ' ') Обрезает символы(delimiter) с конца строки -
    trim(string[], const delimiter = ' ') Обрезает символы(delimiter) с двух сторон строки -
    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_sumbol(string[], find[2], replace, pos = 0) Заменяет один символ в строке. -

    Скачать:

    Установка:
    1. Скачать библиотеку.
    2. Все файлы, точнее библиотеки, переместить в папку 'pawno/includes'. Впрочем, можно воспользоваться флагом '-i<путь>' для указания альтернативного пути для библиотек.
    3. Библиотеки необходимо подключать после файла 'a_samp'.
      Пример:
      PHP код:
      #include <a_samp>
      #include <tdw_string> 
    4. Скомпилировать изменённые вами скрипты.


    Благодарности:
    • Untonyst (оптимизация/составление функций)
    • Nexius (идеи некоторых функций)
    • ziggi (советы и идеи к функциям)
    • DeimoS (фикс функции)


    Распространяется по лицензии ZLIB.
    Последний раз редактировалось VVWVV; 04.11.2016 в 03:30. Причина: Обновление 04.11.2016

  2. 3 пользователя(ей) сказали cпасибо:
    Desulaid (13.10.2016) L0ndl3m (05.11.2016) SooBad (31.08.2017)
  3. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Почему для find_first есть pos, а для find_first_of и других подобных функций этого параметра нет?
    Что насчёт compare или isequal? Для замены багнутого strcmp. Вижу memcmp, но он требует указание длины, в принципе этот параметр можно сделать не обязательным, как сделано в stcmp.
    Ещё бы не помешали какие-нибудь strtoupper и strtolower, для перевода всей (или части) строки в верхний и нижний регистр соответственно. Только с учётом кириллицы.

    А в целом - круто, жаль что в Pawn нельзя сделать поддержку перегрузки операторов для массивов. Было бы классно склеивать строки через + и сравнивать через ==.
    P.S. Закинь в README список функций, так будет удобнее.
    P.P.S. Вот ещё отсюда можно позаимствовать некоторые функции.
    Последний раз редактировалось ziggi; 14.10.2016 в 21:18.

  4. Пользователь сказал cпасибо:
    VVWVV (14.10.2016)
  5. #3
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Почему для find_first есть pos, а для find_first_of и других подобных функций этого параметра нет?
    Что насчёт compare или isequal? Для замены багнутого strcmp. Вижу memcmp, но он требует указание длины, в принципе этот параметр можно сделать не обязательным, как сделано в stcmp.
    Ещё бы не помешали какие-нибудь strtoupper и strtolower, для перевода всей (или части) строки в верхний и нижний регистр соответственно. Только с учётом кириллицы.
    Спасибо, учту все предложения.

    UPD: Добавил.

    Цитата Сообщение от ziggi Посмотреть сообщение
    А в целом - круто, жаль что в Pawn нельзя сделать поддержку перегрузки операторов для массивов. Было бы классно склеивать строки через + и сравнивать через ==.
    Я делал что-то подобное, но смутил синтаксис (вот коммит удаления).
    Последний раз редактировалось VVWVV; 15.10.2016 в 00:15.

  6. #4
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Я делал что-то подобное, но смутил синтаксис (вот коммит удаления).
    И как оно выглядело?

  7. #5
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    И как оно выглядело?
    Как-то так:
    PHP код:
    new a[10], b[3];
    s<b>; // strcpy
    s<--a[,]>; // strdel
    s<?? "b"!>; // strfind(a, "b", true, 0)
    s<b>; // strcat(...) 
    Взял синтаксис от Python и Haskell.

  8. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Обновление 03/10/2016 (версия: 1.1.8):
    - Добавлены функции strparttoupper и strparttolower
    Данные функции изменяют строчные буквы на заглавные (и наоборот) на отдельных участках строки.
    - Добавлены функции countofuppercase и countoflowpercase
    Подсчитывают количество заглавных и строчных букв в строке.
    - Добавлена функция strtrtrans
    Переводит русские символы в транслитерацию.

    Обновление 19/10/2016 (версия: 1.1.15):
    - Добавлены новые функции в файлы тестов.
    - Изменена функция IsPackedString.
    - Добавлены новые аргументы функциям: memcmp, find_firs_not_of, find_first_of
    - Добавлена поддержка Cririlic (Windows-1251)
    - Добавлены новые функции islowerpart, isupperpart
    - Добавлен новый псевдо-оператор foreach_string (beta)

    Обновление 26/10/2016 (версия 1.1.19):
    - Добавлена новая функция strcatex
    - Из-за того, что github не поддерживает Windows-1251, было решено перенести все зависимые от кодировки функции в отдельный файл depend_encoding.
    - Исправлены некоторые ошибки (errors), предупреждения (warnings), баги.
    Последний раз редактировалось VVWVV; 27.10.2016 в 00:41.

  9. Пользователь сказал cпасибо:
    Desulaid (27.10.2016)
  10. #7
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Обновление 04/11/2016 (Версия 1.1.32):
    - Добавлены функции strcatex, strfill, strimplodeex, strimplode, strsplit, replace_sumbol (автор: Deimos).
    - Некоторые функции переехали в отдельные файлы.
    - Исправлены некоторые ошибки.

  11. #8
    Аватар для Mr_LemoneZ
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.12.2016
    Адрес
    Беларусь
    Сообщений
    41
    Репутация:
    1 ±
    После подключения данной библиотеки, функция strcmp постоянно возращает ноль, а использование memcmp в OnDialogResponse вызывает ошибку:
    Код:
    [debug] Run time error 5: "Invalid memory access"
    [debug] AMX backtrace:
    [debug] #0 0000a060 in memcmp (string1[]=@000b6664 "tes", string2[]=@000ba554 "test123", n=204, size_1=51, size_2=51) at C:\Users\LemoneZ\Pawn\Belarus_RolePlay\pawno\include\tdw_string/string.inc:94
    [debug] #1 00028518 in public FIXES_OnDialogResponse (... <5 arguments>)  at C:\Users\LemoneZ\Pawn\Belarus_RolePlay\gamemodes\brp.pwn:3206
    [debug] #2 00008244 in public OnDialogResponse (playerid=0, dialogid=17, response=1, listitem=-1, inputtext[]=@000b6664 "tes") at C:\Users\LemoneZ\Pawn\Belarus_RolePlay\pawno\include\fixes.inc:7982
    И возникает она только в том случае, если одна из сравниваемых строк меньше, чем 4 символа. При этом, если у меня будет строка "test123" и в inputtext я запишу "test12", то memcmp сообщит, что строки равны.

  12. #9
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Mr_LemoneZ Посмотреть сообщение
    После подключения данной библиотеки, функция strcmp постоянно возращает ноль, а использование memcmp в OnDialogResponse вызывает ошибку:
    Код:
    [debug] Run time error 5: "Invalid memory access"
    [debug] AMX backtrace:
    [debug] #0 0000a060 in memcmp (string1[]=@000b6664 "tes", string2[]=@000ba554 "test123", n=204, size_1=51, size_2=51) at C:\Users\LemoneZ\Pawn\Belarus_RolePlay\pawno\include\tdw_string/string.inc:94
    [debug] #1 00028518 in public FIXES_OnDialogResponse (... <5 arguments>)  at C:\Users\LemoneZ\Pawn\Belarus_RolePlay\gamemodes\brp.pwn:3206
    [debug] #2 00008244 in public OnDialogResponse (playerid=0, dialogid=17, response=1, listitem=-1, inputtext[]=@000b6664 "tes") at C:\Users\LemoneZ\Pawn\Belarus_RolePlay\pawno\include\fixes.inc:7982
    И возникает она только в том случае, если одна из сравниваемых строк меньше, чем 4 символа. При этом, если у меня будет строка "test123" и в inputtext я запишу "test12", то memcmp сообщит, что строки равны.
    1. Функцию strcmp проверю.
    2. При использовании функции memcmp в параметре n стоит значение 204, хотя размер вашей строки 51.

  13. #10
    Аватар для Mr_LemoneZ
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.12.2016
    Адрес
    Беларусь
    Сообщений
    41
    Репутация:
    1 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    2. При использовании функции memcmp в параметре n стоит значение 204, хотя размер вашей строки 51.
    Установил в параметре n число 51, теперь ошибки нет, но, как ни странно, memcmp также постоянно возращает ноль (а если одна из строк пустая, то -1).
    Последний раз редактировалось Mr_LemoneZ; 18.06.2017 в 20:32.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •