Показать полную графическую версию : [решено] Автоматизация замены текста в конфиге.
Нужен скрипт/софтина/плагин np++ для массовой замены переменных в конфиге который периодически восстанавливается в исходное значение.
Предположим имеется файл с текстом:
a=1
b=2
c=3
В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33".
Что бы стало так:
a=11
b=2
c=33
Через np++ нужно каждую строчку менять отдельно или же писать макрос, но отредактировать макрос нельзя, только писать с начала. Через Text Replacer можно заменить подряд несколько строчек, а не в разных местах файла.
Предположим имеется файл с текстом: »
Без предположений — упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск.
В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33". »
Укажите, что и на что конкретно нужно заменить.
P.S. А простое тупое копирование «правильного» варианта файла поверх «восстановленного» не поможет?
Без предположений — упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »
Зачем ? мой пример текста недостаточно подробный ?
P.S. А простое тупое копирование «правильного» варианта файла поверх «восстановленного» не поможет? »
Нет, потому что новая версия файла постоянно дополняется, но после каждого обновления требуется вносить старые правки не удаляя при этом ничего лишнего.
https://youtu.be/d1If9TOmgik
ANIMka, возможно подойдет
CMD/BAT - [решено] Замена строк в файле, содержащем пустые строки (http://forum.oszone.net/post-2477640.html)
Зачем ? мой пример текста недостаточно подробный ? »
Он ни о чём.
Он ни о чём. »
В текстовом файле есть переменная <option name="use-otp2" value="false"/> которую нужно заменить на <option name="use-otp2" value="true"/>, подобных переменных которые нужно менять каждый раз много и они идут не подряд.
ANIMka, я уже сказал, что требуется и сам файл:
упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »
Не хотите — дело Ваше, уговаривать не стану.
подобных переменных которые нужно менять каждый раз много и они идут не подряд. »
Перечислите все их, укажите на что менять каждую.
Не хотите — дело Ваше, уговаривать не стану. »
http://rgho.st/6qZwW6KSf
Нужно поменять <option name="use-sns-following" value="false"/> на <option name="use-sns-following" value="true"/> и <option name="use-powerbook" value="false"/> на <option name="use-powerbook" value="true"/>
Это не xml-файл, а некий его огрызок.
Это не xml-файл, а некий его огрызок. »
Извиняюсь конечно, но какая разница ?
xml-парсер работает с валидными xml-файлами, но не с их огрызками.
Мне нужно решение которое будет актуально при работе с любыми текстовыми файлами, а не только с данным конкретным xml.
WSH или PowerShell — на выбор. Будет актуально всегда и с любыми текстовыми файлами.
WSH или PowerShell — на выбор. Будет актуально всегда и с любыми текстовыми файлами. »
Я почти не разбираюсь в командах и не смогу написать подобный скрипт самостоятельно.
Копаясь по форуму я уже наткнулся на одно из ваших сообщений (http://forum.oszone.net/post-1746903-7.html), но к сожалению не могу его подогнать под свои нужды из-за конфликтов с ковычками.
ANIMka, чудес не бывает. Чем более универсальное решение требуется — тем шире и сложнее становится входной язык.
Копаясь по форуму я уже наткнулся на одно из ваших сообщений, но к сожалению не могу его подогнать под свои нужды из-за конфликтов с ковычками. »
Вы можете его приспособить под один конкретный случай, не более. Как только в Вашем xml-файле окажется кирилица в UTF-8 — он обломается.
ANIMka, чудес не бывает. Чем более универсальное решение требуется — тем шире и сложнее становится входной язык. »
Понял.
упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »
Вот целиковый xml (http://rgho.st/private/8zhYVwhHK/5e3ed2c9cceea8d663135d3a23646c05)
В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33".
Что бы стало так:
a=11
b=2
c=33 »
замена в file.txt
fnr.exe --cl --dir %1 --fileMask "file*.txt" --excludeFileMask "*.dll, *.exe" --skipBinaryFileDetection --showEncoding --alwaysUseEncoding "cp866" --find "a=1" --replace "a=11"
fnr.exe --cl --dir %1 --fileMask "file*.txt" --excludeFileMask "*.dll, *.exe" --skipBinaryFileDetection --showEncoding --alwaysUseEncoding "cp866" --find "c=3" --replace "c=33"
pause
fnr тут https://findandreplace.codeplex.com/
Я, к сожалению, не нашёл в нём:
Вот целиковый xml »
ни первого, ни второго:
Нужно поменять <option name="use-sns-following" value="false"/> на <option name="use-sns-following" value="true"/> и <option name="use-powerbook" value="false"/> на <option name="use-powerbook" value="true"/> »
Ну, да ладно. Предположим, что требуется задать значения атрибута «value» указанных узлов:
http://i.imgur.com/Ru8kvjD.png
Выглядеть сие может примерно так:
Option Explicit
Dim strSourceFile
If WScript.Arguments.Count = 1 Then
strSourceFile = WScript.Arguments.Item(0)
If WScript.CreateObject("Scripting.FileSystemObject").FileExists(strSourceFile) Then
With WScript.CreateObject("Microsoft.XMLDOM")
.load(strSourceFile)
.selectSingleNode("/config/group[@name='input']/option[@name='use-recommend-key']").setAttribute "value", "false"
.selectSingleNode("/config/group[@name='input']/option[@name='process-key-when-skill-finish']").setAttribute "value", "false"
.selectSingleNode("/config/group[@name='mouse']/option[@name='left-click-move']").setAttribute "value", "no"
.selectSingleNode("/config/group[@name='mouse']/option[@name='right-click-move']").setAttribute "value", "yes"
.save(strSourceFile)
End With
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 2
End If
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
WScript.Quit 1
End If
WScript.Quit 0
Amigos, что я делаю не так ?
http://i.imgur.com/7sNr86R.png
Iska, Работает, но попытавшись добавить свою переменную у меня возникла проблемка.
http://i.imgur.com/vkj2jG8.png
ANIMka, там будет другой путь XPath (https://www.google.com/search?q=xml+XPath).
Смотрите, сначала у нас идёт узел config, внутри него узел group с атрибутом name со значением camera, внутри него узел group с атрибутом name со значением player, внутри него узел option с атрибутом far-cam-height-jin-m со значением, которое нужно задать. Таким образом, путь можно указать таким:
/config/group[@name='camera']/group[@name='player']/option[@name='far-cam-height-jin-m']
и в коде:
.selectSingleNode("/config/group[@name='camera']/group[@name='player']/option[@name='far-cam-height-jin-m']").setAttribute "value", "62.000000"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.