![]() |
Замена текста с помощью VBScript при условии?!
Здравствуйте, пытаюсь реализовать скрипт который будет находить нужное мне значение например 1134 и заменять на 1401 при условии что 1134 должно находится между dota_camera_pitch_max и dota_camera_distance.
Код:
Const ForReading = 1 |
Hraniti, лучше не пытайтесь работать таким кодом с бинарными файлами, коими являются библиотеки.
Как надо:
|
Hraniti, Если тупо решать задачу как поставлено (Iska наверняка прав!) то вместо Вашего реплэйса
Код:
lstrText = LCase(strText) |
Iska, Я понимаю что не надо, но давайте попробуем реализовать как я прошу попробовать. Ну если есть возможность можете более детальней объяснить как сделать эту надобность.
|
Hraniti, упаковываете Вашу библиотеку в архив, каковой прикладываете к сообщению. Если сюда не помещается — выкладываете на DropMeFiles.
|
Вложений: 1
megaloman,
Код:
Const ForReading = 1 |
Код:
Option Explicit |
Вложений: 1
Iska, Выдает ошибку и данные не меняются. скриншот прилагаю.
|
Вот собственно сам файл https://yadi.sk/d/q-nkzoD_3a692L
|
Цитата:
|
Вложений: 1
Iska, Спасибо что помогаете. вот скриншот
|
Hraniti, не нахожу. Контрольные суммы выложенного client.dll приведите.
Код:
CRC32: 1453ECB7 |
Iska, Откройте через Notepad++
|
Hraniti, я открывал и через Notepad++. Нету.
Мы можем долго играть в угадайку. Повторяю: приведите контрольные суммы для файла client.dll и укажите точное значение смещения, где находится 1134 (или dota_camera_pitch_max, или dota_camera_distance). |
Вложений: 1
Iska, понял. на всякий случай перезалил файл https://yadi.sk/d/UnQmDTD43aCgLd
Вот данные контрольной суммы. MD5: 4DD79EB8E0EB3DF55618C1145CED6AB8 SHA1: 24E680C045016DB05F291D8B9588275659BE6821 SHA256: A09E4A300F16AF502095CC0B9D8A3193D8499E4676BA5736BA94213FD334B446 Если открыть notepad без переноса строк, интересующая информация содержится на 290877 строчке. Код:
dota_camera_pitch_max 1134 dota_camera_distance Пустота вокруг 1134 это знак NUL. |
Цитата:
На PowerShell это может выглядеть так: Код:
$sPath2Client = 'C:\Мои проекты\0183\client.dll' |
На WSH:
Скрытый текст
Код:
Option Explicit Придётся набраться терпения: перевод массива байт, c которыми VBScript напрямую работать не может, в строку — процесс весьма не быстрый (у меня занимает десять-пятнадцать секунд, ужас). Пробуйте. |
Iska, Мне не хватает ума запустить этот код. я правильно понимаю, мне нужно создать файл с расширением .WSH? или мне нужно просто выполнить данный код через консоль?
Разобрался. у меня порядка минуты уходит что бы выполнился этот код. очень долго. |
Цитата:
Цитата:
|
Iska, Понятно. Спасибо вам большое что помогли найти выход из ситуации. не буду писать хоть и такой долгий.. по времени быстрей самому открыть найти и заменить в ручную. думал об более быстром варианте. Ну в любом случае это работает.
|
Цитата:
|
Цитата:
Код:
$bytes = [io.file]::readallbytes("client.dll") не впечатлила
Код:
Days : 0 в отличие от работы с текстом: Код:
(gc client.dll -raw) -replace '(?<=dota_camera_pitch_max\x00{3})1134','1401'|set-content client2.dll -non приемлемая скорость
Код:
Days : 0 Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Да и в любом случае, перебор массива (в данном случае массива символов, не строк) - затратная операция. |
Цитата:
Код:
For i = 1 To LenB(arrByteArray) Кстати, надо бы и с strValue = strValue & Right("00" & Hex(AscB(MidB(arrByteArray, i, 1))), 2) поэкспериментировать аналогичным образом, может тогда получится увеличить размер буфера чтения (он же размер массива arrByteArray). Цитата:
|
Цитата:
Также обнаружилось, что оптимальные значения размера буфера лежат в интервале от 256 до 2048 байт, изменение размера буфера в меньшую или большую сторону приводит к увеличению времени исполнения (весьма забавно, что интуитивно выбранное значение в 512 байт оказалось по факту, пожалуй, наилучшим выбором — для данного конкретного случая, конечно). |
Цитата:
Цитата:
Код:
$bytes = [io.file]::readallbytes("client.dll") возможно и есть более правильные варианты, но увы знаний у меня по ним нет... |
Цитата:
|
Цитата:
Работаем со всеми доступными методами, главное - результат, а он, увы не впечатляет :) Цитата:
А первоначально, вообще, была стопка вложенных условий... но разница не особо большая получилась :) |
Цитата:
Цитата:
|
ByteKiller или всемизвестный diablo2oo2's Universal Patcher - [dUP] - a freeware patch generator ....уже всёб сделали, пока вы тута переписуетеся
![]() |
x0r, Вы что — тему не читали? Автор не жаждет подобным пользоваться. Я ему зараз предлагал.
|
Iska, да читал я... подумал, что со второго раза, мож одумаюццо люди, да возьмут норм. способ.
|
Iska, да, хотелось какого то более удобного способа. С таким же успехом у могу клавиатуру с мышкой запрограммировать они в секунду будут подобную процедуру делать. просто хочется сделать это перед запуском по умолчанию.
x0r, норм способ это когда вы не думаете что нужно что то каждый раз делать. в день по 10 раз пользоваться костылями? |
Цитата:
|
Iska, при запуске есть консоль которая может работать до запуска самого приложения, соответственно можно было бы автоматизировать.
|
Hraniti, а причём тут консоль, когда Вы ведёте речь про:
Цитата:
|
Iska, В общем не хочу в полемики в ходить, я считаю что все должно быть автоматизировано. используя старинной софт это уже как усложненно. Нужно что бы все было просто, нажал 1 раз и все запустилось как нужно.
|
Цитата:
Вам предоставили код на PowerShell, на WSH, что не так? И почему «усложнено» — какая разница, исполнять скрипт WSH, скрипт PowerShell или патч в виде исполняемого exe-файла? |
Цитата:
Ты можешь сделать в DuP патчер, который будет... в общем, ты даже непотрудился справку почитать того, что тебе предложили. там и маски есть и остальное... ну, вобчем, прадалжай прадалжать жмакать VB. |
Время: 23:10. |
Время: 23:10.
© OSzone.net 2001-