Описание функции


StringInStr

Проверяет вхождение подстроки в указанную строку.

StringInStr('string','substring'[,casesense=0[,occurrence=1[,start=1[,count]]]])

Параметры

string Проверяемая строка.
substring Подстрока для поиска.
casesense [необязательный] Флаг установки чувствительности к регистру написания.
0 = (по умолчанию) не учитывать регистр, используется локальный язык
1 = учитывать регистр
2 = не учитывать регистр, используется основное / быстрое сравнение
occurrence [необязательный] Номер искомого вхождения подстроки в строку. Используйте отрицательное значение параметра для поиска справа. По умолчанию 1 (поиск первого вхождения).
start [необязательный] Начальная позиция поиска, отсчёт от 1.
count [необязательный] Количество символов для поиска. Это ограничивает поиск на участке полной строки. См. примечания.

Возвращаемое значение

Успех:Возвращает позицию найденной подстроки.
Ошибка:Возвращает 0, если подстрока не найдена.

Примечания

Нумерация символов в строке начинается с 1.

Параметр count должен быть больше длины искомой подстроки. Параметр count (в сочетании с параметром start) ограничивает поиск подстроки в полной строке. Следующие два выражения работают одинаково:
StringInStr('the~~string~~to~~search','string',0,1,1,11)
StringInStr(StringMid('the~~string~~to~~search',1,11),'string')

Функцию можно подключить через команду exect

См. также

StringRegExp, StringCompare, StringLeft, StringRight, StringTrimLeft, StringTrimRight, StringLen, StringMid, StringSplit

Примеры:
 Как создать кнопку?

StringInStr('Это~~строка','ОКА')

exect=StringInStr('Это~~строка','ОКА') GLOBALEXECT<a> ;; проверяет вхождение подстроки в указанную строку

exect=$var_s=ClipGet()||$var_i=StringInStr('$var_s','\')||MsgBox(4096,'Результат','$var_i') GLOBALEXECT<a> ;; пример проверки нахождения в буфере обмена пути или ссылки, проверяется символ "\" , переменная $var_i либо 0 либо число больше 0

exect=$var_s=ClipGet()||$var_i=StringInStr('$var_s','\') <IF> $var_i = 0 <THEN> brwsr=$var_s <ELSE> openf=$var_s||x||explorer<open> <ENDIF> ;; открыть в зависимости содержимого буфера обмена: если ссылка, то в браузере, если путь то в редакторе

exect=$var_a=StringSplit(StringReplace('??%%COMMANDER_PATH%%\TCIMG.exe?~~?openup??|??%%COMMANDER_PATH%%\Utilities\TotalCom\ChoiceEditor\ChoiceEditor.exe??','?',Chr(34)),'|')||$var_sc=EnvGet('COMMANDER_INI')||$var_sp=IniRead('$var_sc','Configuration','Editor',Null)||$var_is=StringInStr('$var_sp','TCIMG')?2:1||IniWrite('$var_sc','Configuration','Editor',$var_a[$var_is]) rstart ;; переключение программы просмотра по F4 с перезагрузкой

exect=$var_i=(StringInStr(FileGetAttrib('%P%N'),'D')~~AND~~FileExists('%P%N'))?1:0||_ViewValues($var_i) ;; проверка: возвращает 1, если под курсором папка, 0 - если файл

exect=$var_i=StringInStr('|jpg|gif|png|','|%E|')?_CmdCm('infbx=InfoBox_TEST1'):_CmdCm('infbx=InfoBox_TEST2') ;; пример проверки 3-х расширений, если под курсором расширение совпадает, то выдаётся сообщение №1, если нет - сообщение №2
exect=$var_ext=##<info=o71%P%N//>||$var_i=StringInStr('ini|db|dll','$var_ext')?_CmdCm('infbx=InfoBox_TEST1'):_CmdCm('infbx=InfoBox_TEST2') ;; пример условия проверки расширения файла под курсором

forpgs slist=[tc=AM] <FOR> 1 <TO> GLOBALSLIST<0> exect=$var_ext=##<info=o71GLOBALSLIST<:INDEX:>>||$var_i=StringInStr('ini|db|dll','$var_ext')?_CmdCm('rends=x¦¦##rndm<3-|10><¤>wends=@<**info=o75GXLOBALSLIST<:INDEX:>><**info=o73GXLOBALSLIST<:INDEX:>>-GXLOBALRENDS<1>.zip<¤>start=RAR¦¦-IBCK¦¦a¦¦-m5¦¦-ms¦¦-cfg-¦¦-s¦¦-rr3p¦¦GXLOBALWENDS<1>¦¦<**info=o73GXLOBALSLIST<:INDEX:>>¦¦&&wait<¤>renmm=GXLOBALWENDS<1>¦¦##<**info=f1GXLOBALWENDS<1>|1>'):_CmdCm('start=RAR¦¦-IBCK¦¦a¦¦-m5¦¦-ms¦¦-cfg-¦¦-s¦¦-rr3p¦¦<**info=o75GXLOBALSLIST<:INDEX:>><**info=o73GXLOBALSLIST<:INDEX:>>-<info=s47>.zip¦¦<**info=o73GXLOBALSLIST<:INDEX:>>¦¦&&wait') <NEXT> tcimg=$cm540 ;; упаковать все файлы с расширением ini, db или dll в отдельный архив с именем хеш суммы, а остальные файлы в архивы с исходным именем + дата в активную панель и 3% на восстановление
exect=$var_n=3||$var_i=StringInStr('1|2|5',$var_n)?_CmdCm('infbx=InfoBox_TEST1'):_CmdCm('infbx=InfoBox_TEST2') ;; пример проверки условий с помощью

sends=>s85AkelPad.exe <IF> Execute(StringInStr('GLOBALSENDS<1>','Name.txt')) > 0 <THEN> infbx=InfoBox_TEST1 <ENDIF> ;; если в AkelPad активный документ Name.txt, то выдать сообщение

<IF> Execute(StringInStr('<info=s85AkelPad.exe>','Name.txt')) > 0 <THEN> infbx=InfoBox_TEST1 <ENDIF> ;; если в AkelPad активный документ Name.txt, то выдать сообщение

sends=4 <IF> Execute(StringInStr('1|2|4|5','GLOBALSENDS<1>')) > 0 <THEN> GLOBALSENDS<a> <ENDIF> ;; пример проверки сразу нескольких значений

sends=2 <IF> Execute(StringInStr('|2|222|24|82|','|GLOBALSENDS<1>|')) > 0 <THEN> GLOBALSENDS<a> <ENDIF> ;; пример проверки сразу нескольких значений

arr2d=%WL||46|0|StringInStr(FileGetAttrib('::'),'D')>0 GLOBALARR2D<a> ;; из выделенных объектов получить только папки

arr2d=%P%N||46|0|StringInStr('::','если')>0 GLOBALARR2D<a> ;; из файла под курсором получить в массиве строки, которые включают в себя слово "если" (без учёта регистра)

arr2d=%P%N||46|0|StringInStr('::','если',1)>0 GLOBALARR2D<a> ;; из файла под курсором получить в массиве строки, которые включают в себя слово "если" (учитывая регистр)

arr2d=%P%N||46|0|StringInStr('::','если')=0 GLOBALARR2D<a> ;; из файла под курсором получить в массиве строки, которые не включают в себя слово "если" (без учёта регистра)

arr2d=%P%N||46|0|StringInStr('::','если',1)=0 GLOBALARR2D<a> ;; из файла под курсором получить в массиве строки, которые не включают в себя слово "если" (учитывая регистр)

arr2d=%P%N||46|0|StringInStr('::','cliptext')>0 GLOBALARR2D<a> ;; из файла под курсором получить в массиве строки, в которых есть фраза из буфера обмена (без учёта регистра)

arr2d=%P%N||46|0|StringInStr('::','cliptext',1)>0 GLOBALARR2D<a> ;; из файла под курсором получить в массиве строки, в которых есть фраза из буфера обмена (учитывая регистр)

sends=zip|rar|7z|ace|arj|cab|gz|jar|lzh|tar|xz|wim??-4 dilog=[combo=BOX36] exect=StringInStr('|7z|zip|tar|wim|','|GLOBALCOMBO<1>|')?1:0 GLOBALEXECT<a> ;; выбрать в диалоге тип архива, переменная GLOBALEXECT<1> возвращает 1, если выбран тип 7z, zip, tar, wim или в ином случае 0

sends=zip|rar|7z|ace|arj|cab|gz|jar|lzh|tar|xz|wim??-4 dilog=[combo=BOX36] <IF> Execute(StringInStr('|7z|zip|tar|wim|','|GLOBALCOMBO<1>|')) > 0 <THEN> infbx=||YES||3||170||60 <ELSE> infbx=||NO||3||170||60 <ENDIF> ;; выбрать в диалоге тип архива, если выбран тип 7z, zip, tar, wim - то вывести сообщение "YES", в ином случае "NO"

sends=zip|rar|7z|ace|arj|cab|gz|jar|lzh|tar|xz|wim??-4 dilog=[combo=BOX36] sends=@C:\rar_xx start=%%COMMANDER_PATH%%\Programs\Arhive\WinRAR\WinRAR.exe||x||%P%N||GLOBALSENDS<1>\||&&wait exect=$var_i=GLOBALPROGR<1>=0?0:_CmdCm('delsm=GLOBALSENDS<1>¦¦1')+MsgBox(4096,'Ошибка','Ошибка~~~~GLOBALPROGR<1>'&@CR&'Работа~~прервана!')+_Exit() exect=StringInStr('|7z|zip|tar|wim|','|GLOBALCOMBO<1>|')?1:0 <IF> GLOBALEXECT<1> = 1 <THEN> start=%%COMMANDER_PATH%%\Plugins\wcx\Total7zip\7zG.exe||a||-ad||"%t%O".GLOBALCOMBO<1>||GLOBALSENDS<1>\*||&&wait <ELSE> start=%%COMMANDER_PATH%%\Programs\Arhive\WinRAR\WinRAR.exe||a||-r||-ep1||"%t%O".GLOBALCOMBO<1>||GLOBALSENDS<1>\||GLOBALSENDS<1>\*||&&wait <ENDIF> delsm=GLOBALSENDS<1>||1||upd<3> ;; архив под курсором распаковать во временную папку "C:\rar_xx" с помощью WinRAR и запаковать объекты в другую панель в именной архив и удалить временную папку (тип нового архива вводится в диалоге); для упаковки 7z, zip, tar, wim используется 7zG.exe, в ином случае WinRAR; если при распаковке появляется какая-либо ошибка, то выдаётся сообщение и работа прекращается
sends=PS<"%p"//1//0//*//0//0//3> anf2d=$f212\Selection.txt||7||(.+)\R+(.+)||$1|$2 arr2d=$GLOBALANF2D||46|0|StringInStr($GLOBALSENDS[1],'::')>0 stext=$GLOBALARR2D1??1||0||delim<@CRLF> tcprm=LOADSELECTION||GLOBALSTEXT3<t> ;; в активной панели выделить объекты по разным спискам относительно найденных имён (имена и пути к спискам прописаны в Selection.txt)

sends=PS<"%p"//1//0//*//0//0//3> anf2d=$f212\Selection.txt||7||(.+)\R+(.+)||$1|$2 arr2d=$GLOBALANF2D||46|0|StringInStr($GLOBALSENDS[1],'::')>0 stext=$GLOBALARR2D1??1||0||delim<@CRLF> tcprm=LOADSELECTION||GLOBALSTEXT3<t> tcimg=$cmcm_ExchangeSelection ;; в активной панели выделить все объекты кроме тех, которые есть в разных списках относительно найденных имён (имена и пути к спискам прописаны в Selection.txt)

sends=PS<"%p"//1//0//*//0//0//3> anf2d=$f212\Selection.txt||7||(.+)\R+(.+)||$1|$2 arr2d=$GLOBALANF2D||46|0|StringInStr($GLOBALSENDS[1],'::')>0 stext=$GLOBALARR2D1??1||0||delim<@CRLF> bends=PS<"%p"//0//0//*//0//0//4>||^^GLOBALSTEXT3<x1>@CRLF||?F28 tcprm=LOADSELECTION||GLOBALBENDS<t> ;; в активной панели выделить все объекты кроме тех, которые есть в разных списках относительно найденных имён (имена и пути к спискам прописаны в Selection.txt)

exect=$var_i=(StringInStr(FileGetAttrib('%P%N'),'D')~~AND~~FileExists('%P%N'))?'~~/D':Null cmdbt=cmd~~/c~~mklink$var_i~~''%T%N''~~''%P%N''||0 tcimg=$cm4006|540 ;; для объекта под курсором создать именную символическую ссылку в другой панели

exect=$var_i=(StringInStr(FileGetAttrib('%P%N'),'D')~~AND~~FileExists('%P%N'))?1:0||exect=DllCall('kernel32.dll','boolean','CreateSymbolicLinkW','wstr','%T%N','wstr','%P%N','dword',$var_i) tcimg=$cm4006|540 ;; для объекта под курсором создать именную символическую ссылку в другой панели


© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru