VBS/WSH/JS - Замена значения в ковычках

Ответить
Аватара пользователя
Akiyamka

VBS/WSH/JS - Замена значения в ковычках

Сообщение Akiyamka »

Пишу свой первый скрипт на VBS для простой задачи: найти в xml файле часть строки, которая выглядит так:



Код:

И заменить значение 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 все значения до следующей кавычки. Намекните где посмотреть наглядный пример с похожим функционалом.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Замена значения в ковычках

Сообщение Iska »

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

Re: VBS/WSH/JS - Замена значения в ковычках

Сообщение Iska »

Код:

Код: Выделить всё

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
Аватара пользователя
Akiyamka

Re: VBS/WSH/JS - Замена значения в ковычках

Сообщение Akiyamka »

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



Georgio, что-то не завелся.



Код:

Код: Выделить всё

Строка: 3
Символ: 1
Ошибка: Индекс выходит за пределы допустимого диапазона: 'number: 1'
Код: 800A0009
Вложения
config.zip
(954 байт) 0 скачиваний
config.zip
(954 байт) 0 скачиваний
Аватара пользователя
Akiyamka

Re: VBS/WSH/JS - Замена значения в ковычках

Сообщение Akiyamka »

Код:

Код: Выделить всё

Split(Split(.OpenTextFile(File).ReadAll(),vbCrLf&"screenheight="&Chr(34))(1),Chr(34)&vbCrLf)(0)

Не совсем понимаю что делает это выражение. зачем нужна (1) после &Chr(34))?
Аватара пользователя
Georgio

Re: VBS/WSH/JS - Замена значения в ковычках

Сообщение Georgio »

Код:

Код: Выделить всё

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
Аватара пользователя
Akiyamka

Re: VBS/WSH/JS - Замена значения в ковычках

Сообщение Akiyamka »

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

Re: VBS/WSH/JS - Замена значения в ковычках

Сообщение Akiyamka »

Цитата Akiyamka:



эти значения по умолчанию (screenheight="1024" и screenwidth="768")
VBS/WSH/JS - Замена значения в ковычках




Полагаю, наоборот. Или у Вас экран вертикально развёрнут?



Пробуйте, на 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
Аватара пользователя
Akiyamka

Re: VBS/WSH/JS - Замена значения в ковычках

Сообщение Akiyamka »

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

Вернуться в «Скриптовые языки администрирования Windows»