Что нового

Ускорить большое количество замен в тексте

Suppir

Продвинутый
Сообщения
967
Репутация
62
Привет!

Есть переменная $rtf (текст объемом до 2 Мб). Необходимо сделать замену символов:

Код:
$rtf = StringReplace($rtf, "\'e0", "а")
		$rtf = StringReplace($rtf, "\'e1", "б")
		$rtf = StringReplace($rtf, "\'e2", "в")
		$rtf = StringReplace($rtf, "\'e3", "г")
		$rtf = StringReplace($rtf, "\'e4", "д")
		$rtf = StringReplace($rtf, "\'e5", "е")
		$rtf = StringReplace($rtf, "\'b8", "ё")
		$rtf = StringReplace($rtf, "\'e6", "ж")
		$rtf = StringReplace($rtf, "\'e7", "з")
		$rtf = StringReplace($rtf, "\'e8", "и")
		$rtf = StringReplace($rtf, "\'e9", "й")
		$rtf = StringReplace($rtf, "\'ea", "к")
		$rtf = StringReplace($rtf, "\'eb", "л")
		$rtf = StringReplace($rtf, "\'ec", "м")
		$rtf = StringReplace($rtf, "\'ed", "н")
		$rtf = StringReplace($rtf, "\'ee", "о")
		$rtf = StringReplace($rtf, "\'ef", "п")
		$rtf = StringReplace($rtf, "\'f0", "р")
		$rtf = StringReplace($rtf, "\'f1", "с")
		$rtf = StringReplace($rtf, "\'f2", "т")
		$rtf = StringReplace($rtf, "\'f3", "у")
		$rtf = StringReplace($rtf, "\'f5", "х")
		$rtf = StringReplace($rtf, "\'f4", "ф")
		$rtf = StringReplace($rtf, "\'f6", "ц")
		$rtf = StringReplace($rtf, "\'f7", "ч")
		$rtf = StringReplace($rtf, "\'f8", "ш")
		$rtf = StringReplace($rtf, "\'f9", "щ")
		$rtf = StringReplace($rtf, "\'fc", "ь")
		$rtf = StringReplace($rtf, "\'fa", "ъ")
		$rtf = StringReplace($rtf, "\'fb", "ы")
		$rtf = StringReplace($rtf, "\'fd", "э")
		$rtf = StringReplace($rtf, "\'fe", "ю")
		$rtf = StringReplace($rtf, "\'ff", "я")
		$rtf = StringReplace($rtf, "\'c0", "А")
		$rtf = StringReplace($rtf, "\'c1", "Б")
		$rtf = StringReplace($rtf, "\'c2", "В")
		$rtf = StringReplace($rtf, "\'c3", "Г")
		$rtf = StringReplace($rtf, "\'c4", "Д")
		$rtf = StringReplace($rtf, "\'c5", "Е")
		$rtf = StringReplace($rtf, "\'a8", "Ё")
		$rtf = StringReplace($rtf, "\'c6", "Ж")
		$rtf = StringReplace($rtf, "\'c7", "З")
		$rtf = StringReplace($rtf, "\'c8", "И")
		$rtf = StringReplace($rtf, "\'c9", "Й")
		$rtf = StringReplace($rtf, "\'ca", "К")
		$rtf = StringReplace($rtf, "\'cb", "Л")
		$rtf = StringReplace($rtf, "\'cc", "М")
		$rtf = StringReplace($rtf, "\'cd", "Н")
		$rtf = StringReplace($rtf, "\'ce", "О")
		$rtf = StringReplace($rtf, "\'cf", "П")
		$rtf = StringReplace($rtf, "\'d0", "Р")
		$rtf = StringReplace($rtf, "\'d1", "С")
		$rtf = StringReplace($rtf, "\'d2", "Т")
		$rtf = StringReplace($rtf, "\'d3", "У")
		$rtf = StringReplace($rtf, "\'d5", "Х")
		$rtf = StringReplace($rtf, "\'d4", "Ф")
		$rtf = StringReplace($rtf, "\'d6", "Ц")
		$rtf = StringReplace($rtf, "\'d7", "Ч")
		$rtf = StringReplace($rtf, "\'d8", "Ш")
		$rtf = StringReplace($rtf, "\'d9", "Щ")
		$rtf = StringReplace($rtf, "\'dc", "Ь")
		$rtf = StringReplace($rtf, "\'da", "Ъ")
		$rtf = StringReplace($rtf, "\'db", "Ы")
		$rtf = StringReplace($rtf, "\'dd", "Э")
		$rtf = StringReplace($rtf, "\'de", "Ю")
		$rtf = StringReplace($rtf, "\'df", "Я")
		$rtf = StringReplace($rtf, "\~", " ")
		$rtf = StringReplace($rtf, "\'b9", "N")
		$rtf = StringReplace($rtf, "\tab", "	")


Работает не очень быстро. Можно ли каким-то образом ускорить процесс замены?


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

или хотя бы как-то красивей оформить? :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Suppir [?]
или хотя бы как-то красивей оформить?
Код:
$sRtf = "\'c0\'d3\'d2\'ce\'c8\'d2"

Dim $aRTF_Table[70][2] = _
	[ _
		[69, 0], _
		["'e0", "а"], ["'e1", "б"], ["'e2", "в"], ["'e3", "г"], ["'e4", "д"], ["'e5", "е"], ["'b8", "ё"], _
		["'e6", "ж"], ["'e7", "з"], ["'e8", "и"], ["'e9", "й"], ["'ea", "к"], ["'eb", "л"], ["'ec", "м"], _
		["'ed", "н"], ["'ee", "о"], ["'ef", "п"], ["'f0", "р"], ["'f1", "с"], ["'f2", "т"], ["'f3", "у"], _
		["'f5", "х"], ["'f4", "ф"], ["'f6", "ц"], ["'f7", "ч"], ["'f8", "ш"], ["'f9", "щ"], ["'fc", "ь"], _
		["'fa", "ъ"], ["'fb", "ы"], ["'fd", "э"], ["'fe", "ю"], ["'ff", "я"], ["'c0", "А"], ["'c1", "Б"], _
		["'c2", "В"], ["'c3", "Г"], ["'c4", "Д"], ["'c5", "Е"], ["'a8", "Ё"], ["'c6", "Ж"], ["'c7", "З"], _
		["'c8", "И"], ["'c9", "Й"], ["'ca", "К"], ["'cb", "Л"], ["'cc", "М"], ["'cd", "Н"], ["'ce", "О"], _
		["'cf", "П"], ["'d0", "Р"], ["'d1", "С"], ["'d2", "Т"], ["'d3", "У"], ["'d5", "Х"], ["'d4", "Ф"], _
		["'d6", "Ц"], ["'d7", "Ч"], ["'d8", "Ш"], ["'d9", "Щ"], ["'dc", "Ь"], ["'da", "Ъ"], ["'db", "Ы"], _
		["'dd", "Э"], ["'de", "Ю"], ["'df", "Я"], ["~", " "], ["'b9", "N"], ["tab", "    "] _
	]

For $i = 1 To $aRTF_Table[0][0]
	$sRtf = StringReplace($sRtf, '\' & $aRTF_Table[$i][0], $aRTF_Table[$i][1])
Next

ConsoleWrite($sRtf & @LF)
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Спасибо! Скорость, я так полагаю, будет аналогичная, но выглядит лучше.


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

Потестил:

вариант с двумерным массивом чуть медленней работает: 11,5 секунд вместо 10,3. Наверное, одна секунда уходит на обслуживание массива.
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Момент, сейчас сделаю небольшой файлик.


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

http://zalil.ru/30174204

Ловите. Там файл до перекодировки и файл после перекодировки.
 
Верх