Что нового

[Данные, строки] Удаление повторений в строке по шаблону

---Zak---

Скриптер
Сообщения
455
Репутация
120
Добрый день.

Ребят - "Ай нид хелп"... возможно ли как-нибудь быстренько обработать строки на удаление повторений в них, но с небольшим учетом.

ЗЫ: я понимаю что можно перевести в массив, потом искать совпадения - удалять и переводить это все обратно в строку. Но это очень долго, противно и вообще не вкусно.

Допустим есть массив:

Код:
Local $avArray[3]

$avArray[0] = "000000001;FFFA;000000001 (nnn) FFFA sssssssss\a ssssssssssssssss;na;na;na"
$avArray[1] = "000000002;FFFB;000000002 FFFB sssssssss\b ssssssssssssssss;nb;nb;nb"
$avArray[2] = "000000003;FFFC;000000003 sssssssss\c ssssssssssssssss;nc;nc;nc"


Как бы так сделать, чтобы результат был таким:

000000001;FFFA;(nnn) sssssssss\a ssssssssssssssss;na;na;na
000000002;FFFB;sssssssss\b ssssssssssssssss;nb;nb;nb
000000003;FFFC;sssssssss\c ssssssssssssssss;nc;nc;nc

1. В строке берем символы до ";" (000000001) и далее прыгаем в промежуток "000000001 (nnn) FFFA sssssssss\a ssssssssssssssss" и удаляем от туда символы.
000000001;FFFA;(nnn) FFFA sssssssss\a ssssssssssssssss;na;na;na
000000002;FFFB;FFFB sssssssss\b ssssssssssssssss;nb;nb;nb
000000003;FFFC;sssssssss\c ssssssssssssssss;nc;nc;nc
2. В строке берем символы после ";" и до ближайшего ";" (FFFA) и так же в том же промежутке удаляем эти символы.
000000001;FFFA;(nnn) sssssssss\a ssssssssssssssss;na;na;na
000000002;FFFB;sssssssss\b ssssssssssssssss;nb;nb;nb
000000003;FFFC;sssssssss\c ssssssssssssssss;nc;nc;nc
3. Берем следующую строчку... т.е. дальше искать и удалять ничего не нужно - исключительно 1 и 2 "партии".

Заранее спасибо за ответы...


Добавлено:
Сообщение автоматически объединено:

ЗЫ: как-то так что ли...

Код:
Local $avArray[3]

$avArray[0] = "000000001;FFFA;000000001 (nnn) FFFA sssssssss\a ssssssssssssssss;na;na;na"
$avArray[1] = "000000002;FFFB;000000002 FFFB sssssssss\b ssssssssssssssss;nb;nb;nb"
$avArray[2] = "000000003;FFFC;000000003 sssssssss\c ssssssssssssssss;nc;nc;nc"

For $i=0 To UBound($avArray)-1
	$aSTR = StringSplit($avArray[$i], ';')
	If StringInStr($aSTR[3], $aSTR[1]) Then
		$aSTR[3] = StringRegExpReplace($aSTR[3], $aSTR[1]&" ", "")
		$aSTR[3] = StringStripWS($aSTR[3], 3)
	EndIf
	If StringInStr($aSTR[3], $aSTR[2]) Then
		$aSTR[3] = StringRegExpReplace($aSTR[3], $aSTR[2]&" ", "")
		$aSTR[3] = StringStripWS($aSTR[3], 3)
	EndIf
	$Rez = ''
	For $i2 = 1 To UBound($aSTR)-1
		$Rez &= $aSTR[$i2]&";"

	Next
	ConsoleWrite($Rez&@CRLF)
Next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
---Zak---,
Вроде работает.
Код:
Local $aArray[3], $aPattern[2][2] = [['^(.+?);(.+?);\h?(\1)\h?(.*?)(\2)\h?(.+$)', '$1;$2;$4$6'],['^(.+?);(.+?);\h?(\1)\h?(.+?)(.+$)', '$1;$2;$4$5']]

$aArray[0] = "000000001;FFFA;000000001 (nnn) FFFA sssssssss\a ssssssssssssssss;na;na;na"
$aArray[1] = "000000002;FFFB;000000002 FFFB sssssssss\b ssssssssssssssss;nb;nb;nb"
$aArray[2] = "000000003;FFFC;000000003 sssssssss\c ssssssssssssssss;nc;nc;nc"

For $i = 0 To 2
	ConsoleWrite($aArray[$i] & ' ----> ')
	For $j = 0 To 1
		$aArray[$i] = StringRegExpReplace($aArray[$i], $aPattern[$j][0], $aPattern[$j][1])
		If @extended Then ExitLoop
	Next
	ConsoleWrite($aArray[$i] & @LF)
Next
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 madmasles
Спасибо... работает и быстренько так :ok:.

Теперь пойду допиливать это все
 
Верх