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

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

Ответить
Настройки темы
VBS/WSH/JS - Замена значения в ковычках

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


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

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


Пишу свой первый скрипт на VBS для простой задачи: найти в xml файле часть строки, которая выглядит так:
Код: Выделить весь код
key="X"
И заменить значение X на Y, который водится в диалоговом окне при запуске скрипта.
Нашел вот такой скрипт:
Код: Выделить весь код
Dim fso
Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("config.xml", ForReading) 
YNumber=InputBox("ЗначениеY") '
strText = objFile.ReadAll
objFile.Close

strOldText = "key=""X""" 
strNewText = YNumber
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile("config.xml", ForWriting)  
objFile.WriteLine strNewText
objFile.Close
Почти подходит, но - надо заранее знать X, который я должен указать в strOldText. А в моём случае X может быть любым числом от 0 до 9999.
Т.е. надо как-то допилить скрипт. Например, чтобы он искал по маске "key=""*""" , а потом целиком заменять найденную строку на "key=""Y""". Или искать часть key=", и заменять на Y все значения до следующей кавычки. Намекните где посмотреть наглядный пример с похожим функционалом.

Отправлено: 01:10, 04-09-2014

 

Ветеран


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

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


Akiyamka, упакуйте образец Вашего реального xml-файла в архив и приложите к сообщению.

Отправлено: 03:23, 04-09-2014 | #2



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

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


Ветеран


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

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


Код: Выделить весь код
File="config.xml"
With WScript.CreateObject("Scripting.FileSystemObject")
 x=Replace(.OpenTextFile(File).ReadAll(),Split(Split(.OpenTextFile(File).ReadAll(),vbCrLf&"key="&Chr(34))(1),Chr(34)&vbCrLf)(0),InputBox("Введите новое значение"))
 .OpenTextFile(File,2).Write(x)
End With

Отправлено: 11:26, 04-09-2014 | #3


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


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

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


Вложения
Тип файла: zip config.zip
(954 байт, 16 просмотров)

Iska, и Georgio, начну с того, что скажу Вам огромное спасибо что отозвались. прикрепил файл xml. Ключи screenheight=" " и screenwidth=" ". Задача в том, чтобы их значения менять на введенные через диалоговое окно.

Georgio, что-то не завелся.
Код: Выделить весь код
Строка: 3
Символ: 1
Ошибка: Индекс выходит за пределы допустимого диапазона: 'number: 1'
Код: 800A0009

Отправлено: 01:10, 05-09-2014 | #4


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


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

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


Код: Выделить весь код
Split(Split(.OpenTextFile(File).ReadAll(),vbCrLf&"screenheight="&Chr(34))(1),Chr(34)&vbCrLf)(0)
Не совсем понимаю что делает это выражение. зачем нужна (1) после &Chr(34))?

Отправлено: 01:20, 05-09-2014 | #5


Ветеран


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

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


Код: Выделить весь код
File="config.xml"

set d=CreateObject("Scripting.Dictionary")
d.Add "0", "screenheight"
d.Add "1", "screenwidth"
'''''''''''''''' и т. д. '''''''''''''''''
 
For Each i In d     
 With WScript.CreateObject("Scripting.FileSystemObject")
  x=Replace(.OpenTextFile(File).ReadAll(),Split(Split(.OpenTextFile(File).ReadAll(),d.Item(i)&"="&Chr(34))(1),Chr(34))(0),InputBox("Введите новое значение для "&d.Item(i)))
  .OpenTextFile(File,2).Write(x)
 End With
Next
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:34, 05-09-2014 | #6


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


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

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


Georgio, шикарно,

Отправлено: 10:18, 05-09-2014 | #7


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


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

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


Все таки есть у скрипта недостаток. Он перестает работать если значения screenheight=" " и screenwidth=" " одинаковы, или не указаны. Можно как-нибудь его дописать, чтобы он сначала устанавливал эти значения по умолчанию (screenheight="1024" и screenwidth="768"), и только потом менял?

Отправлено: 22:11, 10-09-2014 | #8


Ветеран


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

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


Цитата Akiyamka:
эти значения по умолчанию (screenheight="1024" и screenwidth="768") »
Полагаю, наоборот. Или у Вас экран вертикально развёрнут?

Пробуйте, на WSH:
читать дальше »
Код: Выделить весь код
Option Explicit

Const ForWriting = 2


Dim strSourceFile

Dim objFSO
Dim objRegExp

Dim strContent

Dim strScreenHeight
Dim strScreenWidth


strSourceFile = "C:\Песочница\054\config.xml"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strSourceFile) Then
	Set objRegExp = WScript.CreateObject("VBScript.RegExp")
	
	With objRegExp
		.IgnoreCase = True
		.Global = True
	End With
	
	With objFSO.OpenTextFile(strSourceFile)
		strContent = .ReadAll()
		.Close
	End With
	
	objRegExp.Pattern = "(screenheight="")(\d*)("")"
	
	If objRegExp.Test(strContent) Then
		strScreenHeight = Trim(objRegExp.Execute(strContent).Item(0).Submatches.Item(1))
		
		If Len(strScreenHeight) = 0 Then
			strScreenHeight = "768"
		End If
		
		strScreenHeight = Trim(InputBox("Enter Screen Height:", "Enter Screen Height", strScreenHeight))
		
		If Len(strScreenHeight) = 0 Then
			WScript.Echo "User cancelled input."
			WScript.Quit 2
		End If
		
		strContent = objRegExp.Replace(strContent, "$1" & strScreenHeight & "$3")
	Else
		WScript.Echo "Can't find ScreenHeight attribute in file."
		WScript.Quit 3
	End If
	
	objRegExp.Pattern = "(screenwidth="")(\d*)("")"
	
	If objRegExp.Test(strContent) Then
		strScreenWidth = Trim(objRegExp.Execute(strContent).Item(0).Submatches.Item(1))
		
		If Len(strScreenWidth) = 0 Then
			strScreenWidth = "1024"
		End If
		
		strScreenWidth = Trim(InputBox("Enter Screen Width:", "Enter Screen Width", strScreenWidth))
		
		If Len(strScreenWidth) = 0 Then
			WScript.Echo "User cancelled input."
			WScript.Quit 2
		End If
		
		strContent = objRegExp.Replace(strContent, "$1" & strScreenWidth & "$3")
	Else
		WScript.Echo "Can't find ScreenWidth attribute in file."
		WScript.Quit 3
	End If
	
	With objFSO.OpenTextFile(strSourceFile, ForWriting)
		.Write strContent
		.Close
	End With
	
	Set objRegExp = Nothing
Else
	WScript.Echo "Source file [" & strSourceFile & "] not found."
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:38, 11-09-2014 | #9


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


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

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


Красота, огромное спасибо!

Отправлено: 12:46, 14-09-2014 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] замена значения в xml-файле firstarey Скриптовые языки администрирования Windows 20 13-11-2017 11:24
CMD/BAT - [решено] Сравнение файлов и замена значения из одного файла в другой. Aleks911tat Скриптовые языки администрирования Windows 12 25-08-2012 22:27
работа с файлами в HEX формате, поиск и замена по 16ричному адресу значения в файле. andr_mozg AutoIt 3 10-03-2012 10:20
Замена e7400 на q8400, нужна ли замена БП? Lehich22 Выбор отдельных компонентов компьютера и конфигурации в целом 3 24-12-2011 21:06
замена значения элемента массива другим значением элемента.. MXM Вебмастеру 1 20-05-2004 06:50




 
Переход