Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Замена текста с помощью VBScript при условии?!

Ответить
Настройки темы
VBS/WSH/JS - Замена текста с помощью VBScript при условии?!

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, пытаюсь реализовать скрипт который будет находить нужное мне значение например 1134 и заменять на 1401 при условии что 1134 должно находится между dota_camera_pitch_max и dota_camera_distance.

Код: Выделить весь код
Const ForReading = 1 
Const ForWriting = 2 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("C:\1111\client.dll", ForReading) 

strText = objFile.ReadAll 
objFile.Close 
strNewText = Replace(strText, "1134", "1401") 

Set objFile = objFSO.OpenTextFile("C:\1111\client.dll", ForWriting) 
objFile.WriteLine strNewText 
objFile.Close
На текущий момент есть первая версия скрипта, но не знаю как сделать условия? что бы значение менялось только в указанных рамках?

Отправлено: 07:53, 10-08-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Hraniti, лучше не пытайтесь работать таким кодом с бинарными файлами, коими являются библиотеки.

Как надо:
  • берёте конкретную версию библиотеки;
  • берёте правильный hex-редактор;
  • открываете в нём библиотеку;
  • ищете потребное значение и находите;
  • делаете потребную замену;
  • на основе сделанной замены создаёте патч для исходной библиотеки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:04, 10-08-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Hraniti, Если тупо решать задачу как поставлено (Iska наверняка прав!) то вместо Вашего реплэйса
Код: Выделить весь код
lstrText = LCase(strText)
marg1 = InStr(1, lstrText, "dota_camera_pitch_max")
marg2 = InStr(1, lstrText, "dota_camera_distance")
repstr = Mid(strText, marg1, marg2 - marg1)

strNewText = Replace(strText, repstr, Replace(repstr, "1134", "1401"))
Если 1134 между указанными строками встречается многократно, то заменятся все.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 11:08, 10-08-2018 | #3


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, Я понимаю что не надо, но давайте попробуем реализовать как я прошу попробовать. Ну если есть возможность можете более детальней объяснить как сделать эту надобность.

Отправлено: 11:09, 10-08-2018 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Hraniti, упаковываете Вашу библиотеку в архив, каковой прикладываете к сообщению. Если сюда не помещается — выкладываете на DropMeFiles.

Отправлено: 11:14, 10-08-2018 | #5


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg 22.jpg
(23.7 Kb, 5 просмотров)

megaloman,

Код: Выделить весь код
Const ForReading = 1 
Const ForWriting = 2 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game\dota\bin\win64\client.dll", ForReading) 

lstrText = LCase(strText)
marg1 = InStr(1, lstrText, "dota_camera_pitch_max")
marg2 = InStr(1, lstrText, "dota_camera_distance")
repstr = Mid(strText, marg1, marg2 - marg1)

strNewText = Replace(strText, repstr, Replace(repstr, "1134", "1401"))

Set objFile = objFSO.OpenTextFile("C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game\dota\bin\win64\client.dll", ForWriting) 
objFile.WriteLine strNewText 
objFile.Close
Пишет ошибку

Отправлено: 12:02, 10-08-2018 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Option Explicit

Const strPath2Client = "C:\Мои проекты\0180\client.dll"

Dim strContent
Dim objRegExp


With WScript.CreateObject("Scripting.FileSystemObject")
	If .FileExists(strPath2Client) Then
		
		With .OpenTextFile(strPath2Client)
			strContent = .ReadAll()
			.Close
		End With
		
		Set objRegExp = WScript.CreateObject("VBScript.RegExp")
		
		objRegExp.Pattern = "(dota_camera_pitch_max\x00{3})1134(\x00{4}dota_camera_distance)"
		
		If objRegExp.Test(strContent) Then
			With .CreateTextFile(strPath2Client, True)
				.Write objRegExp.Replace(strContent, "$11401$2")
				.Close
			End With
		Else
			WScript.Echo "Can't find pattern [" & Replace(objRegExp.Pattern, Chr(0), " ") & "] in source file [" & strPath2Client & "]."
			WScript.Quit 2
		End If
		
		Set objRegExp = Nothing
	Else
		WScript.Echo "Can't find source file [" & strPath2Client & "]."
		WScript.Quit 1
	End If
End With

WScript.Quit 0

Отправлено: 12:42, 10-08-2018 | #7


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg err.jpg
(20.8 Kb, 3 просмотров)

Iska, Выдает ошибку и данные не меняются. скриншот прилагаю.

Отправлено: 11:29, 13-08-2018 | #8


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот собственно сам файл https://yadi.sk/d/q-nkzoD_3a692L

Отправлено: 11:30, 13-08-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Hraniti:
Вот собственно сам файл https://yadi.sk/d/q-nkzoD_3a692L »
Дружище, попробуйте, ради интереса, сами найти в нём dota_camera_pitch_max и dota_camera_distance. Или хотя бы одно из них.

Отправлено: 13:21, 13-08-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Замена текста с помощью VBScript при условии?!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Замена текста с помощью VBScript. Sally88 Скриптовые языки администрирования Windows 19 14-05-2018 16:02
VBS/WSH/JS - [решено] Замена символов в перменных VBScript ymo_4@vk Скриптовые языки администрирования Windows 8 05-12-2017 18:17
VBS/WSH/JS - [решено] Как изменить конкретную строку в текстовом файле с помощью Vbscript neo21 Скриптовые языки администрирования Windows 8 30-10-2011 15:47
[решено] остановка функции при условии. yukuru AutoIt 3 26-07-2011 00:01
VBS/WSH/JS - [решено] Как создать файл в кодировке UTF-8 с помощью VBScript? Zeron Скриптовые языки администрирования Windows 2 30-05-2011 03:50




 
Переход