Что нового

[Данные, строки] Поменять две подстроки местами

SyDr

Сидра
Сообщения
651
Репутация
158
А тебе эти элементы потом нигде не надо?
Просто когда у меня была похожая задача - делал так:
Есть массив с элементами. Из этого массива составлялась строка для GUICtrlSetData
Код:
Local $SetToList = ""
	For $i = 1 To $AlbumsURLs[0] - 1
		$SetToList &= $AlbumsURLs[$i] & "|"
	Next
	$SetToList &= $AlbumsURLs[$AlbumsURLs[0]]

Ну а поменять местами два элемента в массиве - это уже элементарно. К тому, так удобнее добавлять элементы, вствлять их в начало или середину списка и т.п.
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
SyDr
Я долго думал, какой вариант работы со списком лучше: как со строкой или как с массивом...
Пока не остановился ни на том, ни на другом...
Экспериментирую и в том варианте, и в другом...
Очень обнадежили регэкспы своими беспредельными возможностями по обработке строк...
Обменять элементы массива "методом стакана" просто, но плохо то, что список хранится в виде строки, и его нужно будет каждый раз выгружать из массива в строку в цикле...
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Потестируй : (замена с последующим фрагментом)
Код:
$TEXT="Мороз и солнце день чудесный|Еще ты дремлешь друг прелестный|Вставай красавица проснись|Открой сомкнутый негой взоры|На встречу северной Авроры|Звездою севера вернись|"
$SSTR="Мороз и солнце день чудесный"
$sPattern='^(.*)(' & $SSTR & '\|)([^|]*\|)(.*)$'
$sRez= StringRegExpReplace($TEXT,$sPattern, '\1\3\2\4')
ConsoleWrite($sRez &@CRLF)
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
gregaz
Обмен со следующим не заработал только в случае: предпоследний-последний...
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
А это для замены предыдущего фрагмента :
Код:
$TEXT='|111|222|333|444|555|666|777|888|999|'
$SSTR='999'
$sPattern='^(.*\|)?([^|]*\|)(' & $SSTR & '\|)(.*)$'
$sRez= StringRegExpReplace($TEXT,$sPattern, '\1\3\2\4')
ConsoleWrite($sRez &@CRLF)

Потестируй. Теперь два шаблона можно будет объединить в 1 .
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
gregaz
Обмен с предыдущим не заработал в двух случаях:
- обмен последнего с предпоследним (ничего не меняется)
- попытка обмена первого с "перед первым" (получается наподобие дублирования всей строки целиком)...
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Код:
; Замена последующего фрагмента
$TEXT='|111|222|333|444|555|666|777|888|999|'
$SSTR='888'
$sPattern='^(.*\|)?(' & $SSTR & '\|)([^|]*\|)(.*)$'

$sRez= StringRegExpReplace($TEXT,$sPattern, '\1\3\2\4')
ConsoleWrite($sRez &@CRLF)
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
gregaz
Замена последующего фрагмента не работает в случае: последний-предпоследний...

Кстати, взял для примера $TEXT='|111|222|333|444|555|666|777|888|999|'...
Аналогично... 888 не меняется с 999...
 
Верх