; НАЧАЛО
$TEXT="|ABC|123|456|789|ABC|123|"
$SSTR="789"
; Зная подстроку "789" надо поменять ее местами с предыдущим элементом,
; отделенным символом "|"
; подстрока "456" не известна...
; КОНЕЦ
$TEXT="|ABC|123|456|789|ABC|123|"
$SSTR="789"
$Matches = StringRegExp($TEXT, "(.+)\|(.+?)\|(" & $SSTR & ")\|(.+)", 1)
If @error = 0 Then
MsgBox (0, "", $Matches[0] & "|" & $Matches[2] & "|" & $Matches[1] & "|" & $Matches[3])
EndIf
Не претендуя на оптимальность так :snoitaleR сказал(а):Подскажи, пожалуйста, как изменить шаблон, если подстроку 789 надо обменять не с предыдущим элементом, а с последующим?
$a='|ABC|123|456|789|ABC|123|'
$b='789'
$sPattern='^(.*\|)(.*\|)(' & $b & '\|)(.*\|)(.*\|)$'
$sRez= StringRegExpReplace($a,$sPattern, '\1\2\4\3\5')
ConsoleWrite($sRez &@CRLF)
Здесь надо подумать как универсализовать ПаттернsnoitaleR сказал(а):И еще, как учесть в шаблоне случай, когда (при обмене с предыдущим) подстрока 789 крайняя правая плюс символ "|"? И также при обмене с последующим элементом, когда подстрока 789 крайняя левая плюс символ "|"?
Можно так :snoitaleR сказал(а):И еще, как учесть в шаблоне случай, когда (при обмене с предыдущим) подстрока 789 крайняя правая плюс символ "|"?
$a='|ABC|123|456|789|ABC|XYZ|'
$b='XYZ'
$sPattern='^(.*\|)(.*\|)('& $b &'\|)(.*)?$'
; $sRez= StringRegExpReplace($a,$sPattern, '\1\3\2')
$sRez= StringRegExpReplace($a,$sPattern, '\1\3\2\4')
ConsoleWrite($sRez &@CRLF)
Можно так :И также при обмене с последующим элементом, когда подстрока 789 крайняя левая плюс символ "|"?
$a='|XYZ|ABC|123|456|789|ABC|'
$b='XYZ'
$sPattern='^(' & $b & '\|)(.*\|)(.*)$'
$sRez= StringRegExpReplace($a,$sPattern, '\2\1\3')
ConsoleWrite($sRez &@CRLF)
Сколько элементов в строке ?snoitaleR сказал(а):Строка $TEXT за пределами этой задачи является перечнем пунктов элемента управления GUICtrlCreateList()...Я проверяю прямо на списке, но последний вариант не перемещает ни последний пункт списка выше на один, ни любой внутрений...
snoitaleR сказал(а):gregaz
А в принципе, есть шанс объединения всех шаблонов в один?
Или нужно будет проверять условия через IF?
Он никогда не даст оптимального результатаБуду тогда бэта-тестером...
Покажи строку.snoitaleR сказал(а):gregaz
Строка $TEXT за пределами этой задачи является перечнем пунктов элемента управления GUICtrlCreateList()...
$TEXT="|Мороз и солнце день чудесный|Еще ты дремлешь друг прелестный|Вставай красавица проснись|Открой сомкнутый негой взоры|На встречу северной Авроры|Звездою севера вернись|"
$SSTR="На встречу северной Авроры"