Germany | Finland | Saint Petersburg | Drive

Манипуляции со строками

Опубликовано в M4

Немного сахара на тему манипуляций со строками:

 

# Замена стандартной substr. Третий параметр по умолчанию 1
define(`Substr',`substr(`$1',`$2',m4_default(`$3',1))')
# Замена стандартной find. Если пропущен второй аргумент,
# то вместо него подставляется 0 и поиск идет по всей строке
define(`Find',`ifelse(`$#',2,find(`$1',0,`$2'),find(`$*'))')
# --------------------------------------------------
# Возвращает -1, если значение отсутствует в списке, иначе - присутствует
# Упрощённый вариант функции Find_In_List
# FUNC Exists_In_List(list,str)
# result = Find("," & list & ",",str)
# END FUNC
#
define(`Exists_In_List',`ifelse($#,2,Find("`,'"&`$1'& "`,'","`,'"&`$2'&"`,'"),m4_error(`Illegal number of parameters `$0''))')
# --------------------------------------------------
# Возвращает всю правую часть строки, начиная с символа c порядковым номером START
# FUNC Str_Right(str,start)
# result = substr(str,start,len(str)-start)
# END FUNC
#
define(`Str_Right',`ifelse($#,2,substr(`$1',`$2',len(`$1')-m4_arg(`$2')),m4_error(`Illegal number of parameters `$0''))')
# --------------------------------------------------
# Возвращает правую часть строки длиной N символов
# FUNC Str_RightSymbols(str,N)
# result = substr(str,len(str)-N,N)
# END FUNC
#
define(`Str_RightSymbols',`ifelse($#,2,substr(`$1',len(`$1')-m4_arg(`$2'),m4_arg(`$2')),m4_error(`Illegal number of parameters `$0''))')
# ---------------------------------------------------
# Возвращает левую часть строки. Количество символов по умолчанию - 1
# Str_Left(Str,N)
define(`Str_Left',`substr(`$1',0,m4_default(`$2',1))')
# ---------------------------------------------------
# Убирает из строки N правых символов. По умолчанию отрезается 1 символ
# Str_Cut_Right(Str,N)
define(`Str_Cut_Right',`Str_Left(`$1',len(`$1') -m4_arg(m4_default(`$2',1)))')
# ---------------------------------------------------
# Убирает из строки N левых символов. По умолчанию отрезается 1 символ
# Str_Cut_Left(Str,N)
define(`Str_Cut_Left',`Str_Right(`$1',m4_default(`$2',1))')
# ---------------------------------------------------
# Возвращает часть строки между двумя номерами символов включительно
# Str_Between(Str,Pos1,Pos2)
define(`Str_Between',`substr(`$1',`$2',m4_arg(`$3')-m4_arg(`$2')+1)')
# ---------------------------------------------------
# Замена подстроки, начинающейся со Start позиции и длиной N символов на строку Replace
# Если пропущен третий аргумент, он считается равным 1. Если пропущен 4й аргумент, происходит вставка пустой строки
# Str_Replace(Str,Start,Length,Replace)
define(`Str_Replace',`Str_Left(`$1',m4_default(`$2',0)) & ifelse(`$4',,,`$4',"",,m4_arg(`$4') &) Str_Right(`$1',m4_default(m4_arg(`$2'),0)+m4_default(m4_arg(`$3'),1))')
# ---------------------------------------------------
# Удаление символов из строки. Удаляется Length символов, начиная с позиции с Pos. По умолчанию удаляется 1 символ
# Str_Delete(Str,Pos,Length)
define(`Str_Delete',`Str_Replace(`$1',`$2',`$3')')

 

Добавить комментарий


Библиотека